From 0426f1f17de01c817c78e78fbe1e38def6478fa0 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 2 Nov 2016 14:24:17 +0100 Subject: [PATCH 01/11] Changes from Gerard Konings + a couple of small fixes --- .../upload/umbfiledropzone.directive.js | 86 +++++++++++++++---- .../services/mediatypehelper.service.js | 42 +++++++++ .../common/dialogs/mediapicker.controller.js | 14 ++- .../src/views/common/dialogs/mediapicker.html | 4 +- .../mediaPicker/mediapicker.controller.js | 11 ++- .../overlays/mediaPicker/mediapicker.html | 2 + .../mediapicktypepicker.controller.js | 10 +++ .../mediatypepicker/mediatypepicker.html | 15 ++++ .../components/upload/umb-file-dropzone.html | 7 ++ .../listview/layouts/grid/grid.html | 3 +- .../grid/grid.listviewlayout.controller.js | 10 ++- .../listview/layouts/list/list.html | 3 +- .../list/list.listviewlayout.controller.js | 37 +++++--- 13 files changed, 206 insertions(+), 38 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/common/services/mediatypehelper.service.js create mode 100644 src/Umbraco.Web.UI.Client/src/views/common/overlays/mediatypepicker/mediapicktypepicker.controller.js create mode 100644 src/Umbraco.Web.UI.Client/src/views/common/overlays/mediatypepicker/mediatypepicker.html diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js index e0678c1065..52704855bb 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js @@ -25,7 +25,7 @@ TODO angular.module("umbraco.directives") -.directive('umbFileDropzone', function ($timeout, Upload, localizationService, umbRequestHelper) { +.directive('umbFileDropzone', function ($timeout, Upload, localizationService, umbRequestHelper, editorState) { return { restrict: 'E', @@ -42,6 +42,7 @@ angular.module("umbraco.directives") compact: '@', hideDropzone: '@', + acceptedMediatypes: '=', filesQueued: '=', handleFile: '=', @@ -49,14 +50,15 @@ angular.module("umbraco.directives") }, link: function(scope, element, attrs) { - + scope.queue = []; scope.done = []; scope.rejected = []; + scope.currentFile = undefined; function _filterFile(file) { - + var ignoreFileNames = ['Thumbs.db']; var ignoreFileTypes = ['directory']; @@ -85,20 +87,38 @@ angular.module("umbraco.directives") } else { scope.queue.push(file); } - } }); - + //when queue is done, kick the uploader if(!scope.working){ - _processQueueItem(); - } + + // Upload not allowed + if(!scope.acceptedMediatypes || !scope.acceptedMediatypes.length){ + files.map(function(file){ + file.uploadStatus = "error"; + file.serverErrorMessage = "File type is not allowed here"; + scope.rejected.push(file); + }); + scope.queue = []; + } + + // One allowed mediaType, pick this one + if(scope.acceptedMediatypes && scope.acceptedMediatypes.length === 1){ + scope.contentTypeAlias = scope.acceptedMediatypes[0].alias; + _processQueueItem(); + } + + // More than one, open dialog + if(scope.acceptedMediatypes && scope.acceptedMediatypes.length > 1){ + _chooseMediaType(); + } + } } - function _processQueueItem(){ - + if(scope.queue.length > 0){ scope.currentFile = scope.queue.shift(); _upload(scope.currentFile); @@ -118,10 +138,10 @@ angular.module("umbraco.directives") } function _upload(file) { - + scope.propertyAlias = scope.propertyAlias ? scope.propertyAlias : "umbracoFile"; scope.contentTypeAlias = scope.contentTypeAlias ? scope.contentTypeAlias : "Image"; - + Upload.upload({ url: umbRequestHelper.getApiUrl("mediaApiBaseUrl", "PostAddFile"), fields: { @@ -204,18 +224,48 @@ angular.module("umbraco.directives") }); } + function _chooseMediaType() { + + scope.mediatypepickerOverlay = { + view: "mediatypepicker", + title: "Choose media type", + acceptedMediatypes: scope.acceptedMediatypes, + hideSubmitButton: true, + show: true, + submit: function(model) { + scope.contentTypeAlias = model.selectedType.alias; + + scope.mediatypepickerOverlay.show = false; + scope.mediatypepickerOverlay = null; + + _processQueueItem(); + }, + close: function(oldModel) { + + scope.queue.map(function(file){ + file.uploadStatus = "error"; + file.serverErrorMessage = "Cannot upload this file, no mediatype selected"; + scope.rejected.push(file); + }); + scope.queue = []; + + scope.mediatypepickerOverlay.show = false; + scope.mediatypepickerOverlay = null; + + } + }; + + } scope.handleFiles = function(files, event){ if(scope.filesQueued){ scope.filesQueued(files, event); } - - _filesQueued(files, event); + + _filesQueued(files, event); }; - } - - - }; - }); + } + }; +}); diff --git a/src/Umbraco.Web.UI.Client/src/common/services/mediatypehelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/mediatypehelper.service.js new file mode 100644 index 0000000000..919a803456 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/common/services/mediatypehelper.service.js @@ -0,0 +1,42 @@ +/** + * @ngdoc service + * @name umbraco.services.mediaTypeHelper + * @description A helper service for the media types + **/ +function mediaTypeHelper(mediaTypeResource, $q) { + + var mediaTypeHelperService = { + + getAllowedImagetypes: function (mediaId){ + + // Get All allowedTypes + return mediaTypeResource.getAllowedTypes(mediaId) + .then(function(types){ + + var allowedQ = types.map(function(type){ + return mediaTypeResource.getById(type.id); + }); + + // Get full list + return $q.all(allowedQ).then(function(fullTypes){ + // Only mediatypes with 'umbracoFile' property + + return fullTypes.filter(function(mediatype){ + for(var i = 0; i < mediatype.groups.length; i++){ + var group = mediatype.groups[i]; + for(var j = 0; j < group.properties.length; j++){ + var property = group.properties[j]; + if(property.editor === 'Umbraco.ImageCropper' || property.editor === 'Umbraco.UploadField'){ + return mediatype; + } + } + } + }); + }); + }); + } + }; + + return mediaTypeHelperService; +} +angular.module('umbraco.services').factory('mediaTypeHelper', mediaTypeHelper); diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js index b29388be23..504f547182 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js @@ -1,7 +1,7 @@ //used for the media picker dialog angular.module("umbraco") .controller("Umbraco.Dialogs.MediaPickerController", - function ($scope, mediaResource, umbRequestHelper, entityResource, $log, mediaHelper, eventsService, treeService, $cookies, $element, $timeout) { + function ($scope, mediaResource, umbRequestHelper, entityResource, $log, mediaHelper, mediaTypeHelper, eventsService, treeService, $cookies, $element, $timeout) { var dialogOptions = $scope.dialogOptions; @@ -11,13 +11,17 @@ angular.module("umbraco") $scope.startNodeId = dialogOptions.startNodeId ? dialogOptions.startNodeId : -1; $scope.cropSize = dialogOptions.cropSize; - //preload selected item $scope.target = undefined; if(dialogOptions.currentTarget){ $scope.target = dialogOptions.currentTarget; } + $scope.acceptedMediatypes = []; + mediaTypeHelper.getAllowedImagetypes($scope.startNodeId).then(function(types){ + $scope.acceptedMediatypes = types; + }); + $scope.upload = function(v){ angular.element(".umb-file-dropzone-directive .file-select").click(); }; @@ -65,6 +69,10 @@ angular.module("umbraco") return f.path.indexOf($scope.startNodeId) !== -1; }); }); + + mediaTypeHelper.getAllowedImagetypes(folder.id).then(function(types){ + $scope.acceptedMediatypes = types; + }); } else { $scope.path = []; @@ -76,7 +84,7 @@ angular.module("umbraco") $scope.searchTerm = ""; $scope.images = data.items ? data.items : []; }); - + $scope.currentFolder = folder; }; diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.html b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.html index 540a19d64a..78d8e41127 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.html @@ -116,8 +116,10 @@ diff --git a/src/Umbraco.Web.UI.Client/src/views/components/upload/umb-file-dropzone.html b/src/Umbraco.Web.UI.Client/src/views/components/upload/umb-file-dropzone.html index 6a05d234f0..35d375e94d 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/upload/umb-file-dropzone.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/upload/umb-file-dropzone.html @@ -98,4 +98,11 @@ + + + diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/layouts/grid/grid.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/layouts/grid/grid.html index 4360996b55..16c5efe799 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/layouts/grid/grid.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/layouts/grid/grid.html @@ -39,7 +39,8 @@ on-drag-enter="vm.dragEnter()"> Date: Thu, 3 Nov 2016 09:57:10 +0100 Subject: [PATCH 02/11] position the overlay to the right --- .../src/views/components/upload/umb-file-dropzone.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/components/upload/umb-file-dropzone.html b/src/Umbraco.Web.UI.Client/src/views/components/upload/umb-file-dropzone.html index 35d375e94d..6b05593e11 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/upload/umb-file-dropzone.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/upload/umb-file-dropzone.html @@ -102,7 +102,7 @@ ng-if="mediatypepickerOverlay.show" model="mediatypepickerOverlay" view="mediatypepickerOverlay.view" - position="center"> + position="right"> From 85c2ec68ac641ed013ec12dd5b3d3079b8d0c7d9 Mon Sep 17 00:00:00 2001 From: Claus Date: Thu, 3 Nov 2016 10:39:59 +0100 Subject: [PATCH 03/11] allowing default image and file media types at root. --- .../Persistence/Migrations/Initial/BaseDataCreation.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs b/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs index 9570024b09..8b33599436 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs @@ -149,8 +149,8 @@ namespace Umbraco.Core.Persistence.Migrations.Initial private void CreateCmsContentTypeData() { _database.Insert("cmsContentType", "pk", false, new ContentTypeDto { PrimaryKey = 532, NodeId = 1031, Alias = Constants.Conventions.MediaTypes.Folder, Icon = "icon-folder", Thumbnail = "icon-folder", IsContainer = false, AllowAtRoot = true }); - _database.Insert("cmsContentType", "pk", false, new ContentTypeDto { PrimaryKey = 533, NodeId = 1032, Alias = Constants.Conventions.MediaTypes.Image, Icon = "icon-picture", Thumbnail = "icon-picture" }); - _database.Insert("cmsContentType", "pk", false, new ContentTypeDto { PrimaryKey = 534, NodeId = 1033, Alias = Constants.Conventions.MediaTypes.File, Icon = "icon-document", Thumbnail = "icon-document" }); + _database.Insert("cmsContentType", "pk", false, new ContentTypeDto { PrimaryKey = 533, NodeId = 1032, Alias = Constants.Conventions.MediaTypes.Image, Icon = "icon-picture", Thumbnail = "icon-picture", AllowAtRoot = true }); + _database.Insert("cmsContentType", "pk", false, new ContentTypeDto { PrimaryKey = 534, NodeId = 1033, Alias = Constants.Conventions.MediaTypes.File, Icon = "icon-document", Thumbnail = "icon-document", AllowAtRoot = true }); _database.Insert("cmsContentType", "pk", false, new ContentTypeDto { PrimaryKey = 531, NodeId = 1044, Alias = Constants.Conventions.MemberTypes.DefaultAlias, Icon = "icon-user", Thumbnail = "icon-user" }); } From 0441827578eb3d27dcba2cd585771645e0957799 Mon Sep 17 00:00:00 2001 From: Claus Date: Thu, 3 Nov 2016 10:41:06 +0100 Subject: [PATCH 04/11] using the provided media type when uploading images, instead of using default Image media type. --- src/Umbraco.Web/Editors/MediaController.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web/Editors/MediaController.cs b/src/Umbraco.Web/Editors/MediaController.cs index 08140f9c66..41551d099d 100644 --- a/src/Umbraco.Web/Editors/MediaController.cs +++ b/src/Umbraco.Web/Editors/MediaController.cs @@ -532,7 +532,16 @@ namespace Umbraco.Web.Editors var mediaType = Constants.Conventions.MediaTypes.File; if (UmbracoConfig.For.UmbracoSettings().Content.ImageFileTypes.Contains(ext)) - mediaType = Constants.Conventions.MediaTypes.Image; + { + if (result.FormData.ContainsKey("contentTypeAlias")) + { + mediaType = result.FormData["contentTypeAlias"]; + } + else + { + mediaType = Constants.Conventions.MediaTypes.Image; + } + } //TODO: make the media item name "nice" since file names could be pretty ugly, we have // string extensions to do much of this but we'll need: From a96f48d0a8b02e7558ebfdee938af3226ea2a59b Mon Sep 17 00:00:00 2001 From: Claus Date: Fri, 4 Nov 2016 13:52:36 +0100 Subject: [PATCH 05/11] changing media controller logic. --- src/Umbraco.Web/Editors/MediaController.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web/Editors/MediaController.cs b/src/Umbraco.Web/Editors/MediaController.cs index 41551d099d..932b3f6766 100644 --- a/src/Umbraco.Web/Editors/MediaController.cs +++ b/src/Umbraco.Web/Editors/MediaController.cs @@ -531,17 +531,17 @@ namespace Umbraco.Web.Editors { var mediaType = Constants.Conventions.MediaTypes.File; - if (UmbracoConfig.For.UmbracoSettings().Content.ImageFileTypes.Contains(ext)) + if (result.FormData["contentTypeAlias"] == Constants.Conventions.MediaTypes.Image) { - if (result.FormData.ContainsKey("contentTypeAlias")) - { - mediaType = result.FormData["contentTypeAlias"]; - } - else + if (UmbracoConfig.For.UmbracoSettings().Content.ImageFileTypes.Contains(ext)) { mediaType = Constants.Conventions.MediaTypes.Image; } } + else + { + mediaType = result.FormData["contentTypeAlias"]; + } //TODO: make the media item name "nice" since file names could be pretty ugly, we have // string extensions to do much of this but we'll need: From e77bddd0f216f6eaafd7e6e1f59e3f6d02cd7253 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 10 Nov 2016 11:08:28 +0100 Subject: [PATCH 06/11] add filtering of media types --- .../services/mediatypehelper.service.js | 42 +++++++++++++------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/mediatypehelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/mediatypehelper.service.js index 919a803456..20e5e3799b 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/mediatypehelper.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/mediatypehelper.service.js @@ -19,22 +19,38 @@ function mediaTypeHelper(mediaTypeResource, $q) { // Get full list return $q.all(allowedQ).then(function(fullTypes){ - // Only mediatypes with 'umbracoFile' property - return fullTypes.filter(function(mediatype){ - for(var i = 0; i < mediatype.groups.length; i++){ - var group = mediatype.groups[i]; - for(var j = 0; j < group.properties.length; j++){ - var property = group.properties[j]; - if(property.editor === 'Umbraco.ImageCropper' || property.editor === 'Umbraco.UploadField'){ - return mediatype; - } - } - } - }); + // Find all the media types with an Image Cropper property editor + var filteredTypes = mediaTypeHelperService.getTypeWithEditor(fullTypes, ['Umbraco.ImageCropper']); + + // If there is only one media type with an Image Cropper we will return this one + if(filteredTypes.length === 1) { + return filteredTypes; + // If there is more than one Image cropper, custom media types have been added, and we return all media types with and Image cropper or UploadField + } else { + return mediaTypeHelperService.getTypeWithEditor(fullTypes, ['Umbraco.ImageCropper', 'Umbraco.UploadField']); + } + }); }); - } + }, + + getTypeWithEditor: function (types, editors) { + + return types.filter(function (mediatype) { + for (var i = 0; i < mediatype.groups.length; i++) { + var group = mediatype.groups[i]; + for (var j = 0; j < group.properties.length; j++) { + var property = group.properties[j]; + if( editors.indexOf(property.editor) !== -1 ) { + return mediatype; + } + } + } + }); + + } + }; return mediaTypeHelperService; From 07c2a1432183e9dfc6f4cfd766320af64c2bd028 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 10 Nov 2016 11:13:00 +0100 Subject: [PATCH 07/11] If there is only 1 allowed media type set the alias to auto to let the server decide --- .../components/upload/umbfiledropzone.directive.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js index 52704855bb..fdf949a613 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js @@ -104,9 +104,10 @@ angular.module("umbraco.directives") scope.queue = []; } - // One allowed mediaType, pick this one + // One allowed mediaType if(scope.acceptedMediatypes && scope.acceptedMediatypes.length === 1){ - scope.contentTypeAlias = scope.acceptedMediatypes[0].alias; + // set alias to auto to let the server best decide which media type to use + scope.contentTypeAlias = "umbracoAuto"; _processQueueItem(); } From f9d8754d888cfd7dbf46df4e4af8cc33fbf1ef19 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 10 Nov 2016 12:00:07 +0100 Subject: [PATCH 08/11] add support for one custom media type --- .../components/upload/umbfiledropzone.directive.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js index fdf949a613..65e35a16d1 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js @@ -104,10 +104,16 @@ angular.module("umbraco.directives") scope.queue = []; } - // One allowed mediaType - if(scope.acceptedMediatypes && scope.acceptedMediatypes.length === 1){ - // set alias to auto to let the server best decide which media type to use - scope.contentTypeAlias = "umbracoAuto"; + // One allowed type + if(scope.acceptedMediatypes && scope.acceptedMediatypes.length === 1) { + + // Standard setup - set alias to auto select to let the server best decide which media type to use + if(scope.acceptedMediatypes[0].alias === 'Image') { + scope.contentTypeAlias = "umbracoAutoSelect"; + } else { + scope.contentTypeAlias = scope.acceptedMediatypes[0].alias; + } + _processQueueItem(); } From 4f5bc9eb89d672befe82b8d0c83443e96ea72e23 Mon Sep 17 00:00:00 2001 From: Claus Date: Thu, 10 Nov 2016 12:36:52 +0100 Subject: [PATCH 09/11] updating MediaController with AutoSelect option. --- src/Umbraco.Core/Constants-Conventions.cs | 5 +++++ src/Umbraco.Web/Editors/MediaController.cs | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Constants-Conventions.cs b/src/Umbraco.Core/Constants-Conventions.cs index 7e2bb88964..d7f4576137 100644 --- a/src/Umbraco.Core/Constants-Conventions.cs +++ b/src/Umbraco.Core/Constants-Conventions.cs @@ -122,6 +122,11 @@ namespace Umbraco.Core /// MediaType alias for an image. /// public const string Image = "Image"; + + /// + /// MediaType alias indicating allowing auto-selection. + /// + public const string AutoSelect = "umbracoAutoSelect"; } /// diff --git a/src/Umbraco.Web/Editors/MediaController.cs b/src/Umbraco.Web/Editors/MediaController.cs index 932b3f6766..6604aee507 100644 --- a/src/Umbraco.Web/Editors/MediaController.cs +++ b/src/Umbraco.Web/Editors/MediaController.cs @@ -531,7 +531,7 @@ namespace Umbraco.Web.Editors { var mediaType = Constants.Conventions.MediaTypes.File; - if (result.FormData["contentTypeAlias"] == Constants.Conventions.MediaTypes.Image) + if (result.FormData["contentTypeAlias"] == Constants.Conventions.MediaTypes.AutoSelect) { if (UmbracoConfig.For.UmbracoSettings().Content.ImageFileTypes.Contains(ext)) { From 9e24b694b3c1ca7754d4f3177a453ab7fbac36aa Mon Sep 17 00:00:00 2001 From: Claus Date: Thu, 10 Nov 2016 13:09:22 +0100 Subject: [PATCH 10/11] adding migration to retain functionality as it has always been in root when upgrading. --- .../UpdateAllowedMediaTypesAtRoot.cs | 25 +++++++++++++++++++ src/Umbraco.Core/Umbraco.Core.csproj | 1 + 2 files changed, 26 insertions(+) create mode 100644 src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/UpdateAllowedMediaTypesAtRoot.cs diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/UpdateAllowedMediaTypesAtRoot.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/UpdateAllowedMediaTypesAtRoot.cs new file mode 100644 index 0000000000..565b7f6f13 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/UpdateAllowedMediaTypesAtRoot.cs @@ -0,0 +1,25 @@ +using Umbraco.Core.Configuration; +using Umbraco.Core.Logging; +using Umbraco.Core.Persistence.SqlSyntax; + +namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveFive +{ + /// + /// See: http://issues.umbraco.org/issue/U4-4196 + /// + [Migration("7.5.5", 1, GlobalSettings.UmbracoMigrationName)] + public class UpdateAllowedMediaTypesAtRoot : MigrationBase + { + public UpdateAllowedMediaTypesAtRoot(ISqlSyntaxProvider sqlSyntax, ILogger logger) + : base(sqlSyntax, logger) + { } + + public override void Up() + { + Execute.Sql("UPDATE cmsContentType SET allowAtRoot = 1 WHERE nodeId = 1031 OR nodeId = 1032 OR nodeId = 1033"); + } + + public override void Down() + { } + } +} diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index c28cea24cd..d6b2e0c438 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -429,6 +429,7 @@ + From 2115367353e8e9ef6373209780fd10e5fe0e1995 Mon Sep 17 00:00:00 2001 From: Claus Date: Mon, 14 Nov 2016 09:57:17 +0100 Subject: [PATCH 11/11] updating the migration to include only needed ids. formatting stuff in js. --- .../UpdateAllowedMediaTypesAtRoot.cs | 2 +- .../upload/umbfiledropzone.directive.js | 444 ++++++++---------- .../common/dialogs/mediapicker.controller.js | 75 +-- .../mediaPicker/mediapicker.controller.js | 230 ++++----- 4 files changed, 338 insertions(+), 413 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/UpdateAllowedMediaTypesAtRoot.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/UpdateAllowedMediaTypesAtRoot.cs index 565b7f6f13..c9a0d509e6 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/UpdateAllowedMediaTypesAtRoot.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/UpdateAllowedMediaTypesAtRoot.cs @@ -16,7 +16,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveFiv public override void Up() { - Execute.Sql("UPDATE cmsContentType SET allowAtRoot = 1 WHERE nodeId = 1031 OR nodeId = 1032 OR nodeId = 1033"); + Execute.Sql("UPDATE cmsContentType SET allowAtRoot = 1 WHERE nodeId = 1032 OR nodeId = 1033"); } public override void Down() diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js index 65e35a16d1..6cafa05bc8 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js @@ -10,269 +10,223 @@ /* TODO .directive("umbFileDrop", function ($timeout, $upload, localizationService, umbRequestHelper){ - - return{ - restrict: "A", - link: function(scope, element, attrs){ - - //load in the options model - - - } - } + return{ + restrict: "A", + link: function(scope, element, attrs){ + //load in the options model + } + } }) */ angular.module("umbraco.directives") + .directive('umbFileDropzone', + function($timeout, Upload, localizationService, umbRequestHelper) { + return { + restrict: 'E', + replace: true, + templateUrl: 'views/components/upload/umb-file-dropzone.html', + scope: { + parentId: '@', + contentTypeAlias: '@', + propertyAlias: '@', + accept: '@', + maxFileSize: '@', -.directive('umbFileDropzone', function ($timeout, Upload, localizationService, umbRequestHelper, editorState) { - return { + compact: '@', + hideDropzone: '@', + acceptedMediatypes: '=', - restrict: 'E', - replace: true, + filesQueued: '=', + handleFile: '=', + filesUploaded: '=' + }, + link: function(scope, element, attrs) { + scope.queue = []; + scope.done = []; + scope.rejected = []; + scope.currentFile = undefined; - templateUrl: 'views/components/upload/umb-file-dropzone.html', + function _filterFile(file) { + var ignoreFileNames = ['Thumbs.db']; + var ignoreFileTypes = ['directory']; - scope: { - parentId: '@', - contentTypeAlias: '@', - propertyAlias: '@', - accept: '@', - maxFileSize: '@', + // ignore files with names from the list + // ignore files with types from the list + // ignore files which starts with "." + if (ignoreFileNames.indexOf(file.name) === -1 && + ignoreFileTypes.indexOf(file.type) === -1 && + file.name.indexOf(".") !== 0) { + return true; + } else { + return false; + } + } - compact: '@', - hideDropzone: '@', - acceptedMediatypes: '=', + function _filesQueued(files, event) { + //Push into the queue + angular.forEach(files, + function(file) { - filesQueued: '=', - handleFile: '=', - filesUploaded: '=' - }, + if (_filterFile(file) === true) { - link: function(scope, element, attrs) { - - scope.queue = []; - scope.done = []; - scope.rejected = []; + if (file.$error) { + scope.rejected.push(file); + } else { + scope.queue.push(file); + } + } + }); - scope.currentFile = undefined; + //when queue is done, kick the uploader + if (!scope.working) { + // Upload not allowed + if (!scope.acceptedMediatypes || !scope.acceptedMediatypes.length) { + files.map(function(file) { + file.uploadStatus = "error"; + file.serverErrorMessage = "File type is not allowed here"; + scope.rejected.push(file); + }); + scope.queue = []; + } + // One allowed type + if (scope.acceptedMediatypes && scope.acceptedMediatypes.length === 1) { + // Standard setup - set alias to auto select to let the server best decide which media type to use + if (scope.acceptedMediatypes[0].alias === 'Image') { + scope.contentTypeAlias = "umbracoAutoSelect"; + } else { + scope.contentTypeAlias = scope.acceptedMediatypes[0].alias; + } - function _filterFile(file) { - - var ignoreFileNames = ['Thumbs.db']; - var ignoreFileTypes = ['directory']; + _processQueueItem(); + } + // More than one, open dialog + if (scope.acceptedMediatypes && scope.acceptedMediatypes.length > 1) { + _chooseMediaType(); + } + } + } - // ignore files with names from the list - // ignore files with types from the list - // ignore files which starts with "." - if(ignoreFileNames.indexOf(file.name) === -1 && - ignoreFileTypes.indexOf(file.type) === -1 && - file.name.indexOf(".") !== 0) { - return true; - } else { - return false; - } + function _processQueueItem() { + if (scope.queue.length > 0) { + scope.currentFile = scope.queue.shift(); + _upload(scope.currentFile); + } else if (scope.done.length > 0) { + if (scope.filesUploaded) { + //queue is empty, trigger the done action + scope.filesUploaded(scope.done); + } - } + //auto-clear the done queue after 3 secs + var currentLength = scope.done.length; + $timeout(function() { + scope.done.splice(0, currentLength); + }, + 3000); + } + } - function _filesQueued(files, event){ + function _upload(file) { - //Push into the queue - angular.forEach(files, function(file){ + scope.propertyAlias = scope.propertyAlias ? scope.propertyAlias : "umbracoFile"; + scope.contentTypeAlias = scope.contentTypeAlias ? scope.contentTypeAlias : "Image"; - if(_filterFile(file) === true) { + Upload.upload({ + url: umbRequestHelper.getApiUrl("mediaApiBaseUrl", "PostAddFile"), + fields: { + 'currentFolder': scope.parentId, + 'contentTypeAlias': scope.contentTypeAlias, + 'propertyAlias': scope.propertyAlias, + 'path': file.path + }, + file: file + }) + .progress(function(evt) { + // calculate progress in percentage + var progressPercentage = parseInt(100.0 * evt.loaded / evt.total, 10); + // set percentage property on file + file.uploadProgress = progressPercentage; + // set uploading status on file + file.uploadStatus = "uploading"; + }) + .success(function(data, status, headers, config) { + if (data.notifications && data.notifications.length > 0) { + // set error status on file + file.uploadStatus = "error"; + // Throw message back to user with the cause of the error + file.serverErrorMessage = data.notifications[0].message; + // Put the file in the rejected pool + scope.rejected.push(file); + } else { + // set done status on file + file.uploadStatus = "done"; + // set date/time for when done - used for sorting + file.doneDate = new Date(); + // Put the file in the done pool + scope.done.push(file); + } + scope.currentFile = undefined; + //after processing, test if everthing is done + _processQueueItem(); + }) + .error(function(evt, status, headers, config) { + // set status done + file.uploadStatus = "error"; + //if the service returns a detailed error + if (evt.InnerException) { + file.serverErrorMessage = evt.InnerException.ExceptionMessage; + //Check if its the common "too large file" exception + if (evt.InnerException.StackTrace && + evt.InnerException.StackTrace.indexOf("ValidateRequestEntityLength") > 0) { + file.serverErrorMessage = "File too large to upload"; + } + } else if (evt.Message) { + file.serverErrorMessage = evt.Message; + } + // If file not found, server will return a 404 and display this message + if (status === 404) { + file.serverErrorMessage = "File not found"; + } + //after processing, test if everthing is done + scope.rejected.push(file); + scope.currentFile = undefined; + _processQueueItem(); + }); + } - if(file.$error) { - scope.rejected.push(file); - } else { - scope.queue.push(file); - } - } + function _chooseMediaType() { + scope.mediatypepickerOverlay = { + view: "mediatypepicker", + title: "Choose media type", + acceptedMediatypes: scope.acceptedMediatypes, + hideSubmitButton: true, + show: true, + submit: function(model) { + scope.contentTypeAlias = model.selectedType.alias; + scope.mediatypepickerOverlay.show = false; + scope.mediatypepickerOverlay = null; + _processQueueItem(); + }, + close: function(oldModel) { - }); - - //when queue is done, kick the uploader - if(!scope.working){ + scope.queue.map(function(file) { + file.uploadStatus = "error"; + file.serverErrorMessage = "Cannot upload this file, no mediatype selected"; + scope.rejected.push(file); + }); + scope.queue = []; + scope.mediatypepickerOverlay.show = false; + scope.mediatypepickerOverlay = null; + } + }; + } - // Upload not allowed - if(!scope.acceptedMediatypes || !scope.acceptedMediatypes.length){ - files.map(function(file){ - file.uploadStatus = "error"; - file.serverErrorMessage = "File type is not allowed here"; - scope.rejected.push(file); - }); - scope.queue = []; - } - - // One allowed type - if(scope.acceptedMediatypes && scope.acceptedMediatypes.length === 1) { - - // Standard setup - set alias to auto select to let the server best decide which media type to use - if(scope.acceptedMediatypes[0].alias === 'Image') { - scope.contentTypeAlias = "umbracoAutoSelect"; - } else { - scope.contentTypeAlias = scope.acceptedMediatypes[0].alias; - } - - _processQueueItem(); - } - - // More than one, open dialog - if(scope.acceptedMediatypes && scope.acceptedMediatypes.length > 1){ - _chooseMediaType(); - } - } - } - - function _processQueueItem(){ - - if(scope.queue.length > 0){ - scope.currentFile = scope.queue.shift(); - _upload(scope.currentFile); - }else if(scope.done.length > 0){ - - if(scope.filesUploaded){ - //queue is empty, trigger the done action - scope.filesUploaded(scope.done); - } - - //auto-clear the done queue after 3 secs - var currentLength = scope.done.length; - $timeout(function(){ - scope.done.splice(0, currentLength); - }, 3000); - } - } - - function _upload(file) { - - scope.propertyAlias = scope.propertyAlias ? scope.propertyAlias : "umbracoFile"; - scope.contentTypeAlias = scope.contentTypeAlias ? scope.contentTypeAlias : "Image"; - - Upload.upload({ - url: umbRequestHelper.getApiUrl("mediaApiBaseUrl", "PostAddFile"), - fields: { - 'currentFolder': scope.parentId, - 'contentTypeAlias': scope.contentTypeAlias, - 'propertyAlias': scope.propertyAlias, - 'path': file.path - }, - file: file - }).progress(function (evt) { - - // calculate progress in percentage - var progressPercentage = parseInt(100.0 * evt.loaded / evt.total, 10); - - // set percentage property on file - file.uploadProgress = progressPercentage; - - // set uploading status on file - file.uploadStatus = "uploading"; - - }).success(function (data, status, headers, config) { - - if(data.notifications && data.notifications.length > 0) { - - // set error status on file - file.uploadStatus = "error"; - - // Throw message back to user with the cause of the error - file.serverErrorMessage = data.notifications[0].message; - - // Put the file in the rejected pool - scope.rejected.push(file); - - } else { - - // set done status on file - file.uploadStatus = "done"; - - // set date/time for when done - used for sorting - file.doneDate = new Date(); - - // Put the file in the done pool - scope.done.push(file); - - } - - scope.currentFile = undefined; - - //after processing, test if everthing is done - _processQueueItem(); - - }).error( function (evt, status, headers, config) { - - // set status done - file.uploadStatus = "error"; - - //if the service returns a detailed error - if (evt.InnerException) { - file.serverErrorMessage = evt.InnerException.ExceptionMessage; - - //Check if its the common "too large file" exception - if (evt.InnerException.StackTrace && evt.InnerException.StackTrace.indexOf("ValidateRequestEntityLength") > 0) { - file.serverErrorMessage = "File too large to upload"; - } - - } else if (evt.Message) { - file.serverErrorMessage = evt.Message; - } - - // If file not found, server will return a 404 and display this message - if(status === 404 ) { - file.serverErrorMessage = "File not found"; - } - - //after processing, test if everthing is done - scope.rejected.push(file); - scope.currentFile = undefined; - - _processQueueItem(); - }); - } - - function _chooseMediaType() { - - scope.mediatypepickerOverlay = { - view: "mediatypepicker", - title: "Choose media type", - acceptedMediatypes: scope.acceptedMediatypes, - hideSubmitButton: true, - show: true, - submit: function(model) { - scope.contentTypeAlias = model.selectedType.alias; - - scope.mediatypepickerOverlay.show = false; - scope.mediatypepickerOverlay = null; - - _processQueueItem(); - }, - close: function(oldModel) { - - scope.queue.map(function(file){ - file.uploadStatus = "error"; - file.serverErrorMessage = "Cannot upload this file, no mediatype selected"; - scope.rejected.push(file); - }); - scope.queue = []; - - scope.mediatypepickerOverlay.show = false; - scope.mediatypepickerOverlay = null; - - } - }; - - } - - scope.handleFiles = function(files, event){ - if(scope.filesQueued){ - scope.filesQueued(files, event); - } - - _filesQueued(files, event); - - }; - - } - }; -}); + scope.handleFiles = function(files, event) { + if (scope.filesQueued) { + scope.filesQueued(files, event); + } + _filesQueued(files, event); + }; + } + }; + }); diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js index 504f547182..f337dbce18 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/mediapicker.controller.js @@ -1,7 +1,7 @@ //used for the media picker dialog angular.module("umbraco") .controller("Umbraco.Dialogs.MediaPickerController", - function ($scope, mediaResource, umbRequestHelper, entityResource, $log, mediaHelper, mediaTypeHelper, eventsService, treeService, $cookies, $element, $timeout) { + function($scope, mediaResource, umbRequestHelper, entityResource, $log, mediaHelper, mediaTypeHelper, eventsService, treeService) { var dialogOptions = $scope.dialogOptions; @@ -13,31 +13,32 @@ angular.module("umbraco") //preload selected item $scope.target = undefined; - if(dialogOptions.currentTarget){ + if (dialogOptions.currentTarget) { $scope.target = dialogOptions.currentTarget; } $scope.acceptedMediatypes = []; - mediaTypeHelper.getAllowedImagetypes($scope.startNodeId).then(function(types){ - $scope.acceptedMediatypes = types; - }); + mediaTypeHelper.getAllowedImagetypes($scope.startNodeId) + .then(function(types) { + $scope.acceptedMediatypes = types; + }); - $scope.upload = function(v){ - angular.element(".umb-file-dropzone-directive .file-select").click(); + $scope.upload = function(v) { + angular.element(".umb-file-dropzone-directive .file-select").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(e) { if (e.keyCode === 13) { e.preventDefault(); - + mediaResource .addFolder($scope.newFolderName, $scope.currentFolder.id) .then(function(data) { @@ -56,25 +57,25 @@ angular.module("umbraco") }; $scope.gotoFolder = function(folder) { - - if(!folder){ - folder = {id: -1, name: "Media", icon: "icon-folder"}; + if (!folder) { + folder = { id: -1, name: "Media", icon: "icon-folder" }; } if (folder.id > 0) { entityResource.getAncestors(folder.id, "media") .then(function(anc) { // anc.splice(0,1); - $scope.path = _.filter(anc, function (f) { - return f.path.indexOf($scope.startNodeId) !== -1; - }); + $scope.path = _.filter(anc, + function(f) { + return f.path.indexOf($scope.startNodeId) !== -1; + }); }); - mediaTypeHelper.getAllowedImagetypes(folder.id).then(function(types){ - $scope.acceptedMediatypes = types; - }); - } - else { + mediaTypeHelper.getAllowedImagetypes(folder.id) + .then(function(types) { + $scope.acceptedMediatypes = types; + }); + } else { $scope.path = []; } @@ -84,50 +85,50 @@ angular.module("umbraco") $scope.searchTerm = ""; $scope.images = data.items ? data.items : []; }); - - $scope.currentFolder = folder; + + $scope.currentFolder = folder; }; - - + + $scope.clickHandler = function(image, ev, select) { ev.preventDefault(); - + if (image.isFolder && !select) { $scope.gotoFolder(image); - }else{ + } else { eventsService.emit("dialogs.mediaPicker.select", image); - + //we have 3 options add to collection (if multi) show details, or submit it right back to the callback if ($scope.multiPicker) { $scope.select(image); image.cssclass = ($scope.dialogData.selection.indexOf(image) > -1) ? "selected" : ""; - }else if($scope.showDetails) { - $scope.target= image; + } else if ($scope.showDetails) { + $scope.target = image; $scope.target.url = mediaHelper.resolveFile(image); - }else{ + } else { $scope.submit(image); } } }; - $scope.exitDetails = function(){ - if(!$scope.currentFolder){ + $scope.exitDetails = function() { + if (!$scope.currentFolder) { $scope.gotoFolder(); } $scope.target = undefined; }; - $scope.onUploadComplete = function () { + $scope.onUploadComplete = function() { $scope.gotoFolder($scope.currentFolder); }; - $scope.onFilesQueue = function(){ + $scope.onFilesQueue = function() { $scope.activeDrag = false; }; //default root item - if(!$scope.target){ - $scope.gotoFolder({ id: $scope.startNodeId, name: "Media", icon: "icon-folder" }); + if (!$scope.target) { + $scope.gotoFolder({ id: $scope.startNodeId, name: "Media", icon: "icon-folder" }); } }); \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.controller.js index 27bc380fd3..43c65d99ee 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.controller.js @@ -1,9 +1,9 @@ //used for the media picker dialog angular.module("umbraco") .controller("Umbraco.Overlays.MediaPickerController", - function ($scope, mediaResource, umbRequestHelper, entityResource, $log, mediaHelper, mediaTypeHelper, eventsService, treeService, $element, $timeout, $cookies, $cookieStore, localizationService) { + function($scope, mediaResource, umbRequestHelper, entityResource, $log, mediaHelper, mediaTypeHelper, eventsService, treeService, $element, $timeout, $cookies, $cookieStore, localizationService) { - if(!$scope.model.title) { + if (!$scope.model.title) { $scope.model.title = localizationService.localize("defaultdialogs_selectMedia"); } @@ -16,65 +16,59 @@ angular.module("umbraco") $scope.startNodeId = dialogOptions.startNodeId ? dialogOptions.startNodeId : -1; $scope.cropSize = dialogOptions.cropSize; $scope.lastOpenedNode = $cookieStore.get("umbLastOpenedMediaNodeId"); - if($scope.onlyImages){ - $scope.acceptedFileTypes = mediaHelper.formatFileTypes(Umbraco.Sys.ServerVariables.umbracoSettings.imageFileTypes); - } - else { - $scope.acceptedFileTypes = !mediaHelper.formatFileTypes(Umbraco.Sys.ServerVariables.umbracoSettings.disallowedUploadFiles); + if ($scope.onlyImages) { + $scope.acceptedFileTypes = mediaHelper + .formatFileTypes(Umbraco.Sys.ServerVariables.umbracoSettings.imageFileTypes); + } else { + $scope.acceptedFileTypes = !mediaHelper + .formatFileTypes(Umbraco.Sys.ServerVariables.umbracoSettings.disallowedUploadFiles); } $scope.maxFileSize = Umbraco.Sys.ServerVariables.umbracoSettings.maxFileSize + "KB"; $scope.model.selectedImages = []; $scope.acceptedMediatypes = []; - mediaTypeHelper.getAllowedImagetypes($scope.startNodeId).then(function(types){ - $scope.acceptedMediatypes = types; - }); + mediaTypeHelper.getAllowedImagetypes($scope.startNodeId) + .then(function(types) { + $scope.acceptedMediatypes = types; + }); //preload selected item $scope.target = undefined; - if(dialogOptions.currentTarget){ + if (dialogOptions.currentTarget) { $scope.target = dialogOptions.currentTarget; } - $scope.upload = function(v){ - angular.element(".umb-file-dropzone-directive .file-select").click(); + $scope.upload = function(v) { + angular.element(".umb-file-dropzone-directive .file-select").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() { + if ($scope.newFolderName) { + mediaResource + .addFolder($scope.newFolderName, $scope.currentFolder.id) + .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 + childrenOf: data.parentId //clear the children of the parent + }); - if ($scope.newFolderName) { - - mediaResource - .addFolder($scope.newFolderName, $scope.currentFolder.id) - .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 - childrenOf: data.parentId //clear the children of the parent + $scope.gotoFolder(data); + $scope.showFolderInput = false; + $scope.newFolderName = ""; }); - - $scope.gotoFolder(data); - - $scope.showFolderInput = false; - - $scope.newFolderName = ""; - - }); - - } else { - $scope.showFolderInput = false; - } - + } else { + $scope.showFolderInput = false; + } }; $scope.enterSubmitFolder = function(event) { @@ -86,62 +80,61 @@ angular.module("umbraco") $scope.gotoFolder = function(folder) { - if(!$scope.multiPicker) { + if (!$scope.multiPicker) { deselectAllImages($scope.model.selectedImages); } - if(!folder){ - folder = {id: -1, name: "Media", icon: "icon-folder"}; + if (!folder) { + folder = { id: -1, name: "Media", icon: "icon-folder" }; } if (folder.id > 0) { entityResource.getAncestors(folder.id, "media") .then(function(anc) { // anc.splice(0,1); - $scope.path = _.filter(anc, function (f) { - return f.path.indexOf($scope.startNodeId) !== -1; - }); + $scope.path = _.filter(anc, + function(f) { + return f.path.indexOf($scope.startNodeId) !== -1; + }); }); - mediaTypeHelper.getAllowedImagetypes(folder.id).then(function(types){ + mediaTypeHelper.getAllowedImagetypes(folder.id) + .then(function(types) { $scope.acceptedMediatypes = types; }); - } - else { + } else { $scope.path = []; } //mediaResource.rootMedia() mediaResource.getChildren(folder.id) - .then(function(data) { - $scope.searchTerm = ""; - $scope.images = data.items ? data.items : []; + .then(function(data) { + $scope.searchTerm = ""; + $scope.images = data.items ? data.items : []; - // set already selected images to selected - for (var folderImageIndex = 0; folderImageIndex < $scope.images.length; folderImageIndex++) { + // set already selected images to selected + for (var folderImageIndex = 0; folderImageIndex < $scope.images.length; folderImageIndex++) { + var folderImage = $scope.images[folderImageIndex]; + var imageIsSelected = false; - var folderImage = $scope.images[folderImageIndex]; - var imageIsSelected = false; + for (var selectedImageIndex = 0; + selectedImageIndex < $scope.model.selectedImages.length; + selectedImageIndex++) { + var selectedImage = $scope.model.selectedImages[selectedImageIndex]; - for (var selectedImageIndex = 0; selectedImageIndex < $scope.model.selectedImages.length; selectedImageIndex++) { - var selectedImage = $scope.model.selectedImages[selectedImageIndex]; - - if(folderImage.key === selectedImage.key) { - imageIsSelected = true; + if (folderImage.key === selectedImage.key) { + imageIsSelected = true; + } } - } - - if(imageIsSelected) { - folderImage.selected = true; - } - } - - }); - + if (imageIsSelected) { + folderImage.selected = true; + } + } + }); $scope.currentFolder = folder; // for some reason i cannot set cookies with cookieStore - document.cookie="umbLastOpenedMediaNodeId=" + folder.id; + document.cookie = "umbLastOpenedMediaNodeId=" + folder.id; }; @@ -153,52 +146,40 @@ angular.module("umbraco") eventsService.emit("dialogs.mediaPicker.select", image); selectImage(image); } - } else { - eventsService.emit("dialogs.mediaPicker.select", image); - - if($scope.showDetails) { + if ($scope.showDetails) { $scope.target = image; $scope.target.url = mediaHelper.resolveFile(image); $scope.openDetailsDialog(); } else { selectImage(image); } - } - }; $scope.clickItemName = function(item) { - if(item.isFolder) { + if (item.isFolder) { $scope.gotoFolder(item); } }; function selectImage(image) { - - if(image.selected) { - - for(var i = 0; $scope.model.selectedImages.length > i; i++) { - + if (image.selected) { + for (var i = 0; $scope.model.selectedImages.length > i; i++) { var imageInSelection = $scope.model.selectedImages[i]; - if(image.key === imageInSelection.key) { + if (image.key === imageInSelection.key) { image.selected = false; $scope.model.selectedImages.splice(i, 1); } } - } else { - - if(!$scope.multiPicker) { + if (!$scope.multiPicker) { deselectAllImages($scope.model.selectedImages); } - image.selected = true; $scope.model.selectedImages.push(image); } - } function deselectAllImages(images) { @@ -209,64 +190,53 @@ angular.module("umbraco") images.length = 0; } - $scope.onUploadComplete = function () { + $scope.onUploadComplete = function() { $scope.gotoFolder($scope.currentFolder); }; - $scope.onFilesQueue = function(){ + $scope.onFilesQueue = function() { $scope.activeDrag = false; }; //default root item if (!$scope.target) { + if ($scope.lastOpenedNode && $scope.lastOpenedNode !== -1) { + entityResource.getById($scope.lastOpenedNode, "media") + .then(function(node) { + // make sure that las opened node is on the same path as start node + var nodePath = node.path.split(","); - if($scope.lastOpenedNode && $scope.lastOpenedNode !== -1) { - - entityResource.getById($scope.lastOpenedNode, "media") - .then(function(node){ - - // make sure that las opened node is on the same path as start node - var nodePath = node.path.split(","); - - if(nodePath.indexOf($scope.startNodeId.toString()) !== -1) { - $scope.gotoFolder({id: $scope.lastOpenedNode, name: "Media", icon: "icon-folder"}); - } else { - $scope.gotoFolder({id: $scope.startNodeId, name: "Media", icon: "icon-folder"}); - } - - }, function (err) { - $scope.gotoFolder({id: $scope.startNodeId, name: "Media", icon: "icon-folder"}); - }); - - } else { - - $scope.gotoFolder({id: $scope.startNodeId, name: "Media", icon: "icon-folder"}); - - } - + if (nodePath.indexOf($scope.startNodeId.toString()) !== -1) { + $scope + .gotoFolder({ id: $scope.lastOpenedNode, name: "Media", icon: "icon-folder" }); + } else { + $scope.gotoFolder({ id: $scope.startNodeId, name: "Media", icon: "icon-folder" }); + } + }, + function(err) { + $scope.gotoFolder({ id: $scope.startNodeId, name: "Media", icon: "icon-folder" }); + }); + } else { + $scope.gotoFolder({ id: $scope.startNodeId, name: "Media", icon: "icon-folder" }); + } } $scope.openDetailsDialog = function() { - $scope.mediaPickerDetailsOverlay = {}; - $scope.mediaPickerDetailsOverlay.show = true; + $scope.mediaPickerDetailsOverlay = {}; + $scope.mediaPickerDetailsOverlay.show = true; - $scope.mediaPickerDetailsOverlay.submit = function(model) { + $scope.mediaPickerDetailsOverlay.submit = function(model) { + $scope.model.selectedImages.push($scope.target); + $scope.model.submit($scope.model); - $scope.model.selectedImages.push($scope.target); - $scope.model.submit($scope.model); - - $scope.mediaPickerDetailsOverlay.show = false; - $scope.mediaPickerDetailsOverlay = null; - - }; - - $scope.mediaPickerDetailsOverlay.close = function(oldModel) { - $scope.mediaPickerDetailsOverlay.show = false; - $scope.mediaPickerDetailsOverlay = null; - }; + $scope.mediaPickerDetailsOverlay.show = false; + $scope.mediaPickerDetailsOverlay = null; + }; + $scope.mediaPickerDetailsOverlay.close = function(oldModel) { + $scope.mediaPickerDetailsOverlay.show = false; + $scope.mediaPickerDetailsOverlay = null; + }; }; - - });