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 4a86da02bc..c22316872b 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
@@ -39,9 +39,10 @@ function listViewController($rootScope, $scope, $routeParams, $injector, notific
allowBulkPublish: true,
allowBulkUnpublish: true,
allowBulkDelete: true,
- additionalColumnAliases: ['UpdateDate', 'Owner'],
- additionalColumnHeaders: ['Last edited', 'Updated by'],
- additionalColumnLocalizationKeys: ['defaultdialogs_lastEdited', 'content_updatedBy']
+ additionalColumns: [
+ { alias: 'UpdateDate', header: 'Last edited', localizationKey: 'defaultdialogs_lastEdited' },
+ { alias: 'Owner', header: 'Last edited', localizationKey: 'content_updatedBy' }
+ ]
};
// Retrieve the container configuration for the content type and set options before presenting initial view
@@ -50,10 +51,8 @@ function listViewController($rootScope, $scope, $routeParams, $injector, notific
if (typeof config.pageSize !== 'undefined') {
$scope.options.pageSize = config.pageSize;
}
- if (typeof config.additionalColumnAliases !== 'undefined') {
- $scope.options.additionalColumnAliases = config.additionalColumnAliases.split(',');
- $scope.options.additionalColumnHeaders = config.additionalColumnHeaders.split(',');
- $scope.options.additionalColumnLocalizationKeys = config.additionalColumnLocalizationKeys.split(',');
+ if (typeof config.additionalColumns !== 'undefined') {
+ $scope.options.additionalColumns = config.additionalColumns;
}
if (typeof config.orderBy !== 'undefined') {
$scope.options.orderBy = config.orderBy;
@@ -138,11 +137,11 @@ function listViewController($rootScope, $scope, $routeParams, $injector, notific
};
$scope.getColumnName = function (index) {
- return $scope.options.additionalColumnHeaders[index];
+ return $scope.options.additionalColumns[index].header;
};
$scope.getColumnLocalizationKey = function (index) {
- return $scope.options.additionalColumnLocalizationKeys[index];
+ return $scope.options.additionalColumns[index].localizationKey;
};
$scope.getPropertyValue = function (alias, result) {
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html
index d6f419d1e0..f133ce11b6 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html
@@ -58,10 +58,10 @@
-
-
- {{getColumnName($index)}}
- {{getColumnName($index)}}
+ |
+
+ {{getColumnName($index)}}
+ {{getColumnName($index)}}
|
@@ -87,8 +87,8 @@
{{result.name}}
-
- {{getPropertyValue(alias, result)}}
+ |
+ {{getPropertyValue(column.alias, result)}}
|
|
diff --git a/src/Umbraco.Web/Editors/ContentAndMediaTypeBaseController.cs b/src/Umbraco.Web/Editors/ContentAndMediaTypeBaseController.cs
index ecb9175b97..193938cf30 100644
--- a/src/Umbraco.Web/Editors/ContentAndMediaTypeBaseController.cs
+++ b/src/Umbraco.Web/Editors/ContentAndMediaTypeBaseController.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text.RegularExpressions;
@@ -48,14 +49,11 @@ namespace Umbraco.Web.Editors
if (!string.IsNullOrEmpty(contentItem.ContentType.ContainerConfig))
{
var containerConfig = JsonConvert.DeserializeObject(contentItem.ContentType.ContainerConfig);
+ containerConfig.AdditionalColumns = new List();
- // Populate the column headings and localization keys
+ // Populate the column headings and localization keys
if (!string.IsNullOrEmpty(containerConfig.AdditionalColumnAliases))
{
- var aliases = containerConfig.AdditionalColumnAliases.Split(',');
- var headings = new string[aliases.Length];
- var localizationKeys = new string[aliases.Length];
-
// Find all the properties for doc types that might be in the list
var allowedContentTypeIds = contentItem.ContentType.AllowedContentTypes
.Select(x => x.Id.Value)
@@ -65,38 +63,43 @@ namespace Umbraco.Web.Editors
.SelectMany(x => x.PropertyTypes)
.ToList();
- for (int i = 0; i < aliases.Length; i++)
+ foreach (var alias in containerConfig.AdditionalColumnAliases.Split(','))
{
+ var column = new ContentTypeContainerConfiguration.AdditionalColumnDetail
+ {
+ Alias = alias,
+ };
+
// Try to find heading from custom property (getting the name from the alias)
// - need to look in children of the current content's content type
var property = allPropertiesOfAllowedContentTypes
- .FirstOrDefault(x => x.Alias == aliases[i].ToFirstLower());
+ .FirstOrDefault(x => x.Alias == alias.ToFirstLower());
if (property != null)
{
- headings[i] = property.Name;
+ column.Header = property.Name;
+ column.LocalizationKey = string.Empty;
}
- else if (aliases[i] == "UpdateDate")
+ else if (alias == "UpdateDate")
{
// Special case to restore hard-coded column titles
- headings[i] = "Last edited";
- localizationKeys[i] = "defaultdialogs_lastEdited";
+ column.Header = "Last edited";
+ column.LocalizationKey = "defaultdialogs_lastEdited";
}
- else if (aliases[i] == "Owner")
+ else if (alias == "Owner")
{
// Special case to restore hard-coded column titles (2)
- headings[i] = "Updated by";
- localizationKeys[i] = "content_updatedBy";
+ column.Header = "Updated by";
+ column.LocalizationKey = "content_updatedBy";
}
else
{
// Otherwise just sentence case the alias
- headings[i] = aliases[i].ToFirstUpper().SplitPascalCasing();
- localizationKeys[i] = "content_" + aliases[i].ToFirstLower();
+ column.Header = alias.ToFirstUpper().SplitPascalCasing();
+ column.LocalizationKey = "content_" + alias.ToFirstLower();
}
- }
- containerConfig.AdditionalColumnHeaders = string.Join(",", headings);
- containerConfig.AdditionalColumnLocalizationKeys = string.Join(",", localizationKeys);
+ containerConfig.AdditionalColumns.Add(column);
+ }
}
return containerConfig;
diff --git a/src/Umbraco.Web/Models/ContentEditing/ContentTypeContainerConfiguration.cs b/src/Umbraco.Web/Models/ContentEditing/ContentTypeContainerConfiguration.cs
index 7fc3c19dc8..70184d6d32 100644
--- a/src/Umbraco.Web/Models/ContentEditing/ContentTypeContainerConfiguration.cs
+++ b/src/Umbraco.Web/Models/ContentEditing/ContentTypeContainerConfiguration.cs
@@ -1,4 +1,5 @@
-using System.ComponentModel.DataAnnotations;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
using System.Runtime.Serialization;
namespace Umbraco.Web.Models.ContentEditing
@@ -20,20 +21,6 @@ namespace Umbraco.Web.Models.ContentEditing
///
[DataMember(Name = "additionalColumnAliases")]
public string AdditionalColumnAliases { get; set; }
-
- ///
- /// The headers for the additional columns displayed after the node name in the list
- ///
- /// This isn't persisted, but is calculated from the aliases when passed to the UI
- [DataMember(Name = "additionalColumnHeaders")]
- public string AdditionalColumnHeaders { get; set; }
-
- ///
- /// The localization keys for the additional columns displayed after the node name in the list
- ///
- /// This isn't persisted, but is calculated from the aliases when passed to the UI
- [DataMember(Name = "additionalColumnLocalizationKeys")]
- public string AdditionalColumnLocalizationKeys { get; set; }
///
/// The default order by column for the list
@@ -64,5 +51,25 @@ namespace Umbraco.Web.Models.ContentEditing
///
[DataMember(Name = "allowBulkDelete")]
public bool AllowBulkDelete { get; set; }
+
+ ///
+ /// The column details for the additional columns displayed after the node name in the list
+ ///
+ /// This isn't persisted, but is calculated from the aliases when passed to the UI
+ [DataMember(Name = "additionalColumns")]
+ public IList AdditionalColumns { get; set; }
+
+ [DataContract(Namespace = "")]
+ public class AdditionalColumnDetail
+ {
+ [DataMember(Name = "alias")]
+ public string Alias { get; set; }
+
+ [DataMember(Name = "header")]
+ public string Header { get; set; }
+
+ [DataMember(Name = "localizationKey")]
+ public string LocalizationKey { get; set; }
+ }
}
}