diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbnodepreview.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbnodepreview.directive.js index 62a8bc766e..8d63623efb 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbnodepreview.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbnodepreview.directive.js @@ -15,6 +15,7 @@ icon: "=?", name: "=", description: "=?", + published: "=?", sortable: "=?", allowOpen: "=?", allowRemove: "=?", diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js index 914b601249..5e0f5deada 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js @@ -56,7 +56,7 @@ function entityResource($q, $http, umbRequestHelper) { * * ##usage *
- * entityResource.getPath(id)
+ * entityResource.getPath(id, type)
* .then(function(pathArray) {
* alert('its here!');
* });
@@ -77,6 +77,37 @@ function entityResource($q, $http, umbRequestHelper) {
'Failed to retrieve path for id:' + id);
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.entityResource#getUrl
+ * @methodOf umbraco.resources.entityResource
+ *
+ * @description
+ * Returns a url, given a node ID and type
+ *
+ * ##usage
+ *
+ * entityResource.getUrl(id, type)
+ * .then(function(url) {
+ * alert('its here!');
+ * });
+ *
+ *
+ * @param {Int} id Id of node to return the public url to
+ * @param {string} type Object type name
+ * @returns {Promise} resourcePromise object containing the url.
+ *
+ */
+ getUrl: function(id, type) {
+ return umbRequestHelper.resourcePromise(
+ $http.get(
+ umbRequestHelper.getApiUrl(
+ "entityApiBaseUrl",
+ "GetUrl",
+ [{ id: id }, {type: type }])),
+ 'Failed to retrieve url for id:' + id);
+ },
+
/**
* @ngdoc method
* @name umbraco.resources.entityResource#getById
@@ -140,7 +171,7 @@ function entityResource($q, $http, umbRequestHelper) {
query += "ids=" + item + "&";
});
- // if ids array is empty we need a empty variable in the querystring otherwise the service returns a error
+ // if ids array is empty we need a empty variable in the querystring otherwise the service returns a error
if (ids.length === 0) {
query += "ids=&";
}
diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less
index 3f51b09154..5ef9cc7e74 100644
--- a/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less
+++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less
@@ -17,6 +17,14 @@
border-color: #d9d9d9;
}
+.umb-node-preview--unpublished {
+ .umb-node-preview__icon,
+ .umb-node-preview__name,
+ .umb-node-preview__description {
+ opacity: 0.6;
+ }
+}
+
.umb-node-preview__icon {
display: flex;
width: 25px;
diff --git a/src/Umbraco.Web.UI.Client/src/views/components/umb-node-preview.html b/src/Umbraco.Web.UI.Client/src/views/components/umb-node-preview.html
index b811ae8eec..f31f595a88 100644
--- a/src/Umbraco.Web.UI.Client/src/views/components/umb-node-preview.html
+++ b/src/Umbraco.Web.UI.Client/src/views/components/umb-node-preview.html
@@ -1,4 +1,4 @@
-
+
{{ name }}
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js
index e77e743f2b..f97aa2bf62 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js
@@ -194,8 +194,19 @@ function contentPickerController($scope, dialogService, entityResource, contentR
});
if (currIds.indexOf(item.id) < 0) {
- item.icon = iconHelper.convertFromLegacyIcon(item.icon);
- $scope.renderModel.push({ name: item.name, id: item.id, icon: item.icon, path: item.path });
+
+ // get url for content and media items
+ if(entityType !== "Member") {
+ entityResource.getUrl(item.id, entityType).then(function(data){
+ // update url
+ item.url = data.url;
+ // push item to render model
+ addSelectedItem(item);
+ });
+ } else {
+ addSelectedItem(item);
+ }
+
}
};
@@ -221,43 +232,28 @@ function contentPickerController($scope, dialogService, entityResource, contentR
//load current data
var modelIds = $scope.model.value ? $scope.model.value.split(',') : [];
- var nodePromise = (entityType === "Document") ? contentResource.getByIds(modelIds) : entityResource.getByIds(modelIds, entityType);
+ var nodePromise = entityResource.getByIds(modelIds, entityType);
nodePromise.then(function (data) {
- _.each(modelIds, function (id, i) {
- var entity = _.find(data, function (d) {
- return d.id == id;
- });
-
- if (entity) {
-
- // set icon
- if(entity.icon) {
- entity.icon = iconHelper.convertFromLegacyIcon(entity.icon);
- }
-
- // set default icon
- if (!entity.icon) {
- switch (entityType) {
- case "Document":
- entity.icon = "icon-document";
- break;
- case "Media":
- entity.icon = "icon-picture";
- break;
- case "Member":
- entity.icon = "icon-user";
- break;
- }
- }
-
- var url = (entity.urls && entity.urls.length > 0) ? entity.urls[0] : "";
- var path = ($scope.model.config.showPathOnHover) ? entity.path : "";
-
- $scope.renderModel.push({ name: entity.name, id: entity.id, icon: entity.icon, path: path, url: url });
+ _.each(modelIds, function (id, i) {
+ var entity = _.find(data, function (d) {
+ return d.id == id;
+ });
+
+ if (entity) {
+ // get url for content and media items
+ if(entityType !== "Member") {
+ entityResource.getUrl(entity.id, entityType).then(function(data){
+ // update url
+ entity.url = data.url;
+ // push item to render model
+ addSelectedItem(entity);
+ });
+ } else {
+ addSelectedItem(entity);
}
-
+ }
});
@@ -266,6 +262,40 @@ function contentPickerController($scope, dialogService, entityResource, contentR
});
+ function addSelectedItem(item) {
+
+ // set icon
+ if(item.icon) {
+ item.icon = iconHelper.convertFromLegacyIcon(item.icon);
+ }
+
+ // set default icon
+ if (!item.icon) {
+ switch (entityType) {
+ case "Document":
+ item.icon = "icon-document";
+ break;
+ case "Media":
+ item.icon = "icon-picture";
+ break;
+ case "Member":
+ item.icon = "icon-user";
+ break;
+ }
+ }
+
+ $scope.renderModel.push({
+ "name": item.name,
+ "id": item.id,
+ "icon": item.icon,
+ "path": item.path,
+ "url": item.url,
+ "published": (item.metaData.IsPublished === false && entityType === "Document") ? false : true
+ // only content supports published/unpublished content so we set everything else to published so the UI looks correct
+ });
+
+ }
+
}
angular.module('umbraco').controller("Umbraco.PropertyEditors.ContentPickerController", contentPickerController);
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.html
index abcb7f20c0..a8076ff987 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.html
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.html
@@ -8,6 +8,7 @@
ng-repeat="node in renderModel"
icon="node.icon"
name="node.name"
+ published="node.published"
description="node.url"
sortable="sortable"
allow-remove="allowRemoveButton"
diff --git a/src/Umbraco.Web/Editors/EntityController.cs b/src/Umbraco.Web/Editors/EntityController.cs
index 596e27e3a5..cfc04a7f20 100644
--- a/src/Umbraco.Web/Editors/EntityController.cs
+++ b/src/Umbraco.Web/Editors/EntityController.cs
@@ -144,6 +144,37 @@ namespace Umbraco.Web.Editors
return foundContent.Path.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse);
}
+
+
+
+ public dynamic GetUrl(int id, UmbracoEntityTypes type)
+ {
+ dynamic result = new System.Dynamic.ExpandoObject();
+
+
+ if(type == UmbracoEntityTypes.Document)
+ {
+ var foundUrl = Umbraco.Url(id);
+ if (string.IsNullOrEmpty(foundUrl) == false && foundUrl != "#")
+ {
+ result.url = foundUrl;
+ return result;
+ }
+ }
+
+ var ancestors = GetAncestors(id, type);
+
+ //if content, skip the first node for replicating NiceUrl defaults
+ if(type == UmbracoEntityTypes.Document) {
+ ancestors = ancestors.Skip(1);
+ }
+
+ result.url = "/" + string.Join("/", ancestors.Select(x => x.Name) );
+
+
+ return result;
+ }
+
///
/// Gets an entity by it's unique id if the entity supports that
///