diff --git a/src/Umbraco.Web.UI.Client/src/views/content/content.edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/content.edit.controller.js
index 009a8d410f..c2df32c8e0 100644
--- a/src/Umbraco.Web.UI.Client/src/views/content/content.edit.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/content/content.edit.controller.js
@@ -219,7 +219,7 @@ function ContentEditController($scope, $rootScope, $routeParams, $q, $timeout, $
$scope.loaded = true;
$scope.content = data;
- if (data.isChildOfListView) {
+ if (data.isChildOfListView && data.trashed === false) {
$scope.listViewPath = ($routeParams.page)
? "/content/content/edit/" + data.parentId + "?page=" + $routeParams.page
: "/content/content/edit/" + data.parentId;
diff --git a/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.controller.js
index f7b3ae72bb..3af72e320d 100644
--- a/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.controller.js
@@ -8,14 +8,31 @@
*
*/
-function RecycleBinController($scope, $routeParams) {
- if ($routeParams.section) {
+function RecycleBinController($scope, $routeParams, dataTypeResource) {
+
+ //ensures the list view doesn't actually load until we query for the list view config
+ // for the section
+ $scope.listViewPath = null;
+
+ if ($routeParams.section) {
if ($routeParams.section === "content") {
- $routeParams.id = "-20";
+ $routeParams.id = "-20";
+ dataTypeResource.getById(-95).then(function(result) {
+ _.each(result.preValues, function(i) {
+ $scope.model.config[i.key] = i.value;
+ });
+ $scope.listViewPath = 'views/propertyeditors/listview/listview.html';
+ });
}
else if ($routeParams.section === "media") {
- $routeParams.id = "-21";
+ $routeParams.id = "-21";
+ dataTypeResource.getById(-96).then(function (result) {
+ _.each(result.preValues, function (i) {
+ $scope.model.config[i.key] = i.value;
+ });
+ $scope.listViewPath = 'views/propertyeditors/listview/listview.html';
+ });
}
$scope.model = { config: { entityType: $routeParams.section } };
diff --git a/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.html b/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.html
index 8f3d618850..6e73c19dab 100644
--- a/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.html
+++ b/src/Umbraco.Web.UI.Client/src/views/content/recyclebin.html
@@ -7,7 +7,7 @@
-
+
diff --git a/src/Umbraco.Web.UI.Client/src/views/media/media.edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/media/media.edit.controller.js
index 7e1c612bbe..7a27fd8ba2 100644
--- a/src/Umbraco.Web.UI.Client/src/views/media/media.edit.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/media/media.edit.controller.js
@@ -51,7 +51,7 @@ function mediaEditController($scope, $routeParams, appState, mediaResource, enti
$scope.loaded = true;
$scope.content = data;
- if (data.isChildOfListView) {
+ if (data.isChildOfListView && data.trashed === false) {
$scope.listViewPath = ($routeParams.page)
? "/media/media/edit/" + data.parentId + "?page=" + $routeParams.page
: "/media/media/edit/" + data.parentId;
diff --git a/src/Umbraco.Web.UI.Client/src/views/media/recyclebin.html b/src/Umbraco.Web.UI.Client/src/views/media/recyclebin.html
index dc247a1e5e..88487e77e4 100644
--- a/src/Umbraco.Web.UI.Client/src/views/media/recyclebin.html
+++ b/src/Umbraco.Web.UI.Client/src/views/media/recyclebin.html
@@ -7,7 +7,7 @@
-
+
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js
index 62a62763f4..16e9357864 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js
@@ -143,9 +143,11 @@ function listViewController($rootScope, $scope, $routeParams, $injector, notific
$scope.listViewResultSet = data;
//update all values for display
- _.each($scope.listViewResultSet.items, function(e, index) {
- setPropertyValues(e);
- });
+ if ($scope.listViewResultSet.items) {
+ _.each($scope.listViewResultSet.items, function (e, index) {
+ setPropertyValues(e);
+ });
+ }
if ($scope.options.pageNumber > $scope.listViewResultSet.totalPages) {
$scope.options.pageNumber = $scope.listViewResultSet.totalPages;
diff --git a/src/Umbraco.Web/Models/ContentEditing/EntityBasic.cs b/src/Umbraco.Web/Models/ContentEditing/EntityBasic.cs
index 428bb4ba3d..520ff677b0 100644
--- a/src/Umbraco.Web/Models/ContentEditing/EntityBasic.cs
+++ b/src/Umbraco.Web/Models/ContentEditing/EntityBasic.cs
@@ -28,6 +28,9 @@ namespace Umbraco.Web.Models.ContentEditing
[DataMember(Name = "icon")]
public string Icon { get; set; }
+ [DataMember(Name = "trashed")]
+ public bool Trashed { get; set; }
+
///
/// This is the unique Id stored in the database - but could also be the unique id for a custom membership provider
///
diff --git a/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs b/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs
index 76b4861258..a29ffdbe44 100644
--- a/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs
+++ b/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs
@@ -32,47 +32,52 @@ namespace Umbraco.Web.Models.Mapping
//FROM IContent TO ContentItemDisplay
config.CreateMap()
- .ForMember(
- dto => dto.Owner,
- expression => expression.ResolveUsing>())
- .ForMember(
- dto => dto.Updater,
- expression => expression.ResolveUsing())
- .ForMember(
- dto => dto.Icon,
- expression => expression.MapFrom(content => content.ContentType.Icon))
- .ForMember(
- dto => dto.ContentTypeAlias,
- expression => expression.MapFrom(content => content.ContentType.Alias))
- .ForMember(
- dto => dto.ContentTypeName,
- expression => expression.MapFrom(content => content.ContentType.Name))
- .ForMember(
- dto => dto.IsContainer,
- expression => expression.MapFrom(content => content.ContentType.IsContainer))
- .ForMember(
- dto => dto.IsChildOfListView,
- expression => expression.MapFrom(content => content.Parent().ContentType.IsContainer))
- .ForMember(
- dto => dto.PublishDate,
- expression => expression.MapFrom(content => GetPublishedDate(content, applicationContext)))
- .ForMember(
- dto => dto.TemplateAlias, expression => expression.MapFrom(content => content.Template.Alias))
- .ForMember(
- dto => dto.Urls,
- expression => expression.MapFrom(content =>
- UmbracoContext.Current == null
- ? new[] {"Cannot generate urls without a current Umbraco Context"}
- : content.GetContentUrls()))
- .ForMember(display => display.Properties, expression => expression.Ignore())
- .ForMember(display => display.TreeNodeUrl, expression => expression.Ignore())
- .ForMember(display => display.Notifications, expression => expression.Ignore())
- .ForMember(display => display.Errors, expression => expression.Ignore())
- .ForMember(display => display.Alias, expression => expression.Ignore())
- .ForMember(display => display.Tabs, expression => expression.ResolveUsing())
- .ForMember(display => display.AllowedActions, expression => expression.ResolveUsing(
- new ActionButtonsResolver(new Lazy(() => applicationContext.Services.UserService))))
- .AfterMap((media, display) => AfterMap(media, display, applicationContext.Services.DataTypeService));
+ .ForMember(
+ dto => dto.Owner,
+ expression => expression.ResolveUsing>())
+ .ForMember(
+ dto => dto.Updater,
+ expression => expression.ResolveUsing())
+ .ForMember(
+ dto => dto.Icon,
+ expression => expression.MapFrom(content => content.ContentType.Icon))
+ .ForMember(
+ dto => dto.ContentTypeAlias,
+ expression => expression.MapFrom(content => content.ContentType.Alias))
+ .ForMember(
+ dto => dto.ContentTypeName,
+ expression => expression.MapFrom(content => content.ContentType.Name))
+ .ForMember(
+ dto => dto.IsContainer,
+ expression => expression.MapFrom(content => content.ContentType.IsContainer))
+ .ForMember(
+ dto => dto.IsChildOfListView,
+ //TODO: Fix this shorthand .Parent() lookup, at least have an overload to use the current
+ // application context so it's testable!
+ expression => expression.MapFrom(content => content.Parent().ContentType.IsContainer))
+ .ForMember(
+ dto => dto.Trashed,
+ expression => expression.MapFrom(content => content.Trashed))
+ .ForMember(
+ dto => dto.PublishDate,
+ expression => expression.MapFrom(content => GetPublishedDate(content, applicationContext)))
+ .ForMember(
+ dto => dto.TemplateAlias, expression => expression.MapFrom(content => content.Template.Alias))
+ .ForMember(
+ dto => dto.Urls,
+ expression => expression.MapFrom(content =>
+ UmbracoContext.Current == null
+ ? new[] {"Cannot generate urls without a current Umbraco Context"}
+ : content.GetContentUrls()))
+ .ForMember(display => display.Properties, expression => expression.Ignore())
+ .ForMember(display => display.TreeNodeUrl, expression => expression.Ignore())
+ .ForMember(display => display.Notifications, expression => expression.Ignore())
+ .ForMember(display => display.Errors, expression => expression.Ignore())
+ .ForMember(display => display.Alias, expression => expression.Ignore())
+ .ForMember(display => display.Tabs, expression => expression.ResolveUsing())
+ .ForMember(display => display.AllowedActions, expression => expression.ResolveUsing(
+ new ActionButtonsResolver(new Lazy(() => applicationContext.Services.UserService))))
+ .AfterMap((media, display) => AfterMap(media, display, applicationContext.Services.DataTypeService));
//FROM IContent TO ContentItemBasic
config.CreateMap>()
@@ -85,6 +90,9 @@ namespace Umbraco.Web.Models.Mapping
.ForMember(
dto => dto.Icon,
expression => expression.MapFrom(content => content.ContentType.Icon))
+ .ForMember(
+ dto => dto.Trashed,
+ expression => expression.MapFrom(content => content.Trashed))
.ForMember(
dto => dto.ContentTypeAlias,
expression => expression.MapFrom(content => content.ContentType.Alias))
@@ -115,7 +123,7 @@ namespace Umbraco.Web.Models.Mapping
{
var urlHelper = new UrlHelper(new RequestContext(new HttpContextWrapper(HttpContext.Current), new RouteData()));
var url = urlHelper.GetUmbracoApiService(controller => controller.GetTreeNode(display.Id.ToString(), null));
- display.TreeNodeUrl = url;
+ display.TreeNodeUrl = url;
}
//fill in the template config to be passed to the template drop down.
diff --git a/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs
index f8ad3a3a6d..241d5b3c97 100644
--- a/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs
+++ b/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs
@@ -26,31 +26,36 @@ namespace Umbraco.Web.Models.Mapping
{
//FROM IMedia TO MediaItemDisplay
config.CreateMap()
- .ForMember(
- dto => dto.Owner,
- expression => expression.ResolveUsing>())
- .ForMember(
- dto => dto.Icon,
- expression => expression.MapFrom(content => content.ContentType.Icon))
- .ForMember(
- dto => dto.ContentTypeAlias,
- expression => expression.MapFrom(content => content.ContentType.Alias))
- .ForMember(
- dto => dto.IsChildOfListView,
- expression => expression.MapFrom(content => content.Parent().ContentType.IsContainer))
- .ForMember(
- dto => dto.ContentTypeName,
- expression => expression.MapFrom(content => content.ContentType.Name))
- .ForMember(display => display.Properties, expression => expression.Ignore())
- .ForMember(display => display.TreeNodeUrl, expression => expression.Ignore())
- .ForMember(display => display.Notifications, expression => expression.Ignore())
- .ForMember(display => display.Errors, expression => expression.Ignore())
- .ForMember(display => display.Published, expression => expression.Ignore())
- .ForMember(display => display.Updater, expression => expression.Ignore())
- .ForMember(display => display.Alias, expression => expression.Ignore())
- .ForMember(display => display.IsContainer, expression => expression.Ignore())
- .ForMember(display => display.Tabs, expression => expression.ResolveUsing())
- .AfterMap((media, display) => AfterMap(media, display, applicationContext.Services.DataTypeService));
+ .ForMember(
+ dto => dto.Owner,
+ expression => expression.ResolveUsing>())
+ .ForMember(
+ dto => dto.Icon,
+ expression => expression.MapFrom(content => content.ContentType.Icon))
+ .ForMember(
+ dto => dto.ContentTypeAlias,
+ expression => expression.MapFrom(content => content.ContentType.Alias))
+ .ForMember(
+ dto => dto.IsChildOfListView,
+ //TODO: Fix this shorthand .Parent() lookup, at least have an overload to use the current
+ // application context so it's testable!
+ expression => expression.MapFrom(content => content.Parent().ContentType.IsContainer))
+ .ForMember(
+ dto => dto.Trashed,
+ expression => expression.MapFrom(content => content.Trashed))
+ .ForMember(
+ dto => dto.ContentTypeName,
+ expression => expression.MapFrom(content => content.ContentType.Name))
+ .ForMember(display => display.Properties, expression => expression.Ignore())
+ .ForMember(display => display.TreeNodeUrl, expression => expression.Ignore())
+ .ForMember(display => display.Notifications, expression => expression.Ignore())
+ .ForMember(display => display.Errors, expression => expression.Ignore())
+ .ForMember(display => display.Published, expression => expression.Ignore())
+ .ForMember(display => display.Updater, expression => expression.Ignore())
+ .ForMember(display => display.Alias, expression => expression.Ignore())
+ .ForMember(display => display.IsContainer, expression => expression.Ignore())
+ .ForMember(display => display.Tabs, expression => expression.ResolveUsing())
+ .AfterMap((media, display) => AfterMap(media, display, applicationContext.Services.DataTypeService));
//FROM IMedia TO ContentItemBasic
config.CreateMap>()
@@ -60,6 +65,9 @@ namespace Umbraco.Web.Models.Mapping
.ForMember(
dto => dto.Icon,
expression => expression.MapFrom(content => content.ContentType.Icon))
+ .ForMember(
+ dto => dto.Trashed,
+ expression => expression.MapFrom(content => content.Trashed))
.ForMember(
dto => dto.ContentTypeAlias,
expression => expression.MapFrom(content => content.ContentType.Alias))
diff --git a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs
index 62f726fc28..2cfd9073a8 100644
--- a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs
+++ b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs
@@ -86,6 +86,7 @@ namespace Umbraco.Web.Models.Mapping
.ForMember(display => display.Updater, expression => expression.Ignore())
.ForMember(display => display.Alias, expression => expression.Ignore())
.ForMember(display => display.IsChildOfListView, expression => expression.Ignore())
+ .ForMember(display => display.Trashed, expression => expression.Ignore())
.ForMember(display => display.IsContainer, expression => expression.Ignore())
.ForMember(display => display.TreeNodeUrl, expression => expression.Ignore())
.AfterMap((member, display) => MapGenericCustomProperties(applicationContext.Services.MemberService, member, display));
@@ -107,6 +108,7 @@ namespace Umbraco.Web.Models.Mapping
.ForMember(
dto => dto.Username,
expression => expression.MapFrom(content => content.Username))
+ .ForMember(display => display.Trashed, expression => expression.Ignore())
.ForMember(x => x.Published, expression => expression.Ignore())
.ForMember(x => x.Updater, expression => expression.Ignore())
.ForMember(x => x.Alias, expression => expression.Ignore());