+
+
diff --git a/src/Umbraco.Web.UI.Client/src/views/components/blockcard/umb-block-card.less b/src/Umbraco.Web.UI.Client/src/views/components/blockcard/umb-block-card.less
index 3afa32d099..f10b888ce1 100644
--- a/src/Umbraco.Web.UI.Client/src/views/components/blockcard/umb-block-card.less
+++ b/src/Umbraco.Web.UI.Client/src/views/components/blockcard/umb-block-card.less
@@ -60,6 +60,14 @@ umb-block-card {
background-size: cover;
background-position: 50% 50%;
background-repeat: no-repeat;
+
+ &.--error {
+ border: 2px solid @errorBackground;
+ border-bottom: none;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+ box-sizing: border-box;
+ }
.__icon {
position: absolute;
@@ -75,26 +83,35 @@ umb-block-card {
.__info {
width: 100%;
background-color: #fff;
+ padding-top: 10px;
padding-bottom: 11px;// 10 + 1 to compentiate for the -1 substraction in margin-bottom.
+ &.--error {
+ background-color: @errorBackground;
+ .__name, .__subname {
+ color: @errorText;
+ }
+ }
+
.__name {
font-weight: bold;
font-size: 14px;
color: @ui-action-type;
margin-left: 16px;
- margin-top: 10px;
margin-bottom: -1px;
}
.__subname {
color: @gray-4;
font-size: 12px;
margin-left: 16px;
+ margin-top: 1px;
margin-bottom: -1px;
+ line-height: 1.5em;
}
}
&:hover {
- .__info {
+ .__info:not(.--error) {
.__name {
color: @ui-action-type-hover;
}
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/prevalue/blocklist.blockconfiguration.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/prevalue/blocklist.blockconfiguration.controller.js
index 7c608cb3f4..ebdeebc549 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/prevalue/blocklist.blockconfiguration.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/prevalue/blocklist.blockconfiguration.controller.js
@@ -54,7 +54,7 @@
var contentElementType = vm.getElementTypeByKey($scope.model.value[index].contentElementTypeKey);
overlayService.confirmDelete({
title: data[0],
- content: localizationService.tokenReplace(data[1], [contentElementType.name]),
+ content: localizationService.tokenReplace(data[1], [contentElementType ? contentElementType.name : "(Unavailable ElementType)"]),
confirmMessage: data[2],
close: function () {
overlayService.close();
@@ -91,7 +91,7 @@
if (vm.elementTypes) {
return vm.elementTypes.find(function (type) {
return type.key === key;
- });
+ }) || null;
}
};
@@ -99,8 +99,11 @@
//we have to add the 'alias' property to the objects, to meet the data requirements of itempicker.
var selectedItems = Utilities.copy($scope.model.value).forEach((obj) => {
- obj.alias = vm.getElementTypeByKey(obj.contentElementTypeKey).alias;
- return obj;
+ var elementType = vm.getElementTypeByKey(obj.contentElementTypeKey);
+ if(elementType) {
+ obj.alias = elementType.alias;
+ return obj;
+ }
});
var availableItems = vm.getAvailableElementTypes()
@@ -178,31 +181,37 @@
vm.openBlockOverlay = function (block) {
- localizationService.localize("blockEditor_blockConfigurationOverlayTitle", [vm.getElementTypeByKey(block.contentElementTypeKey).name]).then(function (data) {
+ var elementType = vm.getElementTypeByKey(block.contentElementTypeKey);
- var clonedBlockData = Utilities.copy(block);
- vm.openBlock = block;
+ if(elementType) {
+ localizationService.localize("blockEditor_blockConfigurationOverlayTitle", [elementType.name]).then(function (data) {
- var overlayModel = {
- block: clonedBlockData,
- title: data,
- view: "views/propertyeditors/blocklist/prevalue/blocklist.blockconfiguration.overlay.html",
- size: "small",
- submit: function(overlayModel) {
- loadElementTypes()// lets load elementType again, to ensure we are up to date.
- TransferProperties(overlayModel.block, block);// transfer properties back to block object. (Doing this cause we dont know if block object is added to model jet, therefor we cant use index or replace the object.)
- overlayModel.close();
- },
- close: function() {
- editorService.close();
- vm.openBlock = null;
- }
- };
+ var clonedBlockData = Utilities.copy(block);
+ vm.openBlock = block;
- // open property settings editor
- editorService.open(overlayModel);
+ var overlayModel = {
+ block: clonedBlockData,
+ title: data,
+ view: "views/propertyeditors/blocklist/prevalue/blocklist.blockconfiguration.overlay.html",
+ size: "small",
+ submit: function(overlayModel) {
+ loadElementTypes()// lets load elementType again, to ensure we are up to date.
+ TransferProperties(overlayModel.block, block);// transfer properties back to block object. (Doing this cause we dont know if block object is added to model jet, therefor we cant use index or replace the object.)
+ overlayModel.close();
+ },
+ close: function() {
+ editorService.close();
+ vm.openBlock = null;
+ }
+ };
- });
+ // open property settings editor
+ editorService.open(overlayModel);
+
+ });
+ } else {
+ alert("Cannot be edited cause ElementType does not exist.");
+ }
};
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/prevalue/blocklist.blockconfiguration.overlay.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/prevalue/blocklist.blockconfiguration.overlay.controller.js
index bb0fefb558..dac8f2c6ff 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/prevalue/blocklist.blockconfiguration.overlay.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/prevalue/blocklist.blockconfiguration.overlay.controller.js
@@ -35,17 +35,20 @@
};
vm.openElementType = function(elementTypeKey) {
- var elementTypeId = vm.getElementTypeByKey(elementTypeKey).id;
- const editor = {
- id: elementTypeId,
- submit: function (model) {
- editorService.close();
- },
- close: function () {
- editorService.close();
- }
- };
- editorService.documentTypeEditor(editor);
+ var elementType = vm.getElementTypeByKey(elementTypeKey);
+ if (elementType) {
+ var elementTypeId = elementType.id;
+ const editor = {
+ id: elementTypeId,
+ submit: function (model) {
+ editorService.close();
+ },
+ close: function () {
+ editorService.close();
+ }
+ };
+ editorService.documentTypeEditor(editor);
+ }
};
vm.createElementTypeAndCallback = function(callback) {
@@ -110,7 +113,7 @@
overlayService.confirmRemove({
title: data[0],
- content: localizationService.tokenReplace(data[1], [settingsElementType.name]),
+ content: localizationService.tokenReplace(data[1], [(settingsElementType ? settingsElementType.name : "(Unavailable ElementType)")]),
close: function () {
overlayService.close();
},
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
index 10070e8c6b..7c1c815ae6 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
@@ -1856,6 +1856,8 @@ Mange hilsner fra Umbraco robotten
Du har lavet ændringer til dette indhold. Er du sikker på at du vil kassere dem?
Annuller oprettelse?
+
Error!
+
The ElementType of this block does not exist anymore
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
index a920e86775..bd8b2c48a0 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
@@ -2472,6 +2472,8 @@ To manage your website, simply open the Umbraco back office and start adding con
You have made changes to this content. Are you sure you want to discard them?
Discard creation?
+
Error!
+
The ElementType of this block does not exist anymore
What are Content Templates?
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
index edf644b760..70a1cce79b 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
@@ -2492,6 +2492,8 @@ To manage your website, simply open the Umbraco back office and start adding con
You have made changes to this content. Are you sure you want to discard them?
Discard creation?
+
Error!
+
The ElementType of this block does not exist anymore
What are Content Templates?