diff --git a/src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js b/src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js index 868b8baba7..77ed357c35 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js @@ -425,7 +425,11 @@ if (self.scaffolds) { self.scaffolds.push(formatScaffoldData(scaffold)); } - })); + }).catch( + () => { + // Do nothing if we get an error. + } + )); }); return $q.all(tasks); @@ -439,7 +443,14 @@ * @return {Array} array of strings representing alias. */ getAvailableAliasesForBlockContent: function () { - return this.blockConfigurations.map(blockConfiguration => this.getScaffoldFromKey(blockConfiguration.contentElementTypeKey).contentTypeAlias); + return this.blockConfigurations.map( + (blockConfiguration) => { + var scaffold = this.getScaffoldFromKey(blockConfiguration.contentElementTypeKey); + if (scaffold) { + return scaffold.contentTypeAlias; + } + } + ); }, /** @@ -519,7 +530,7 @@ var dataModel = getDataByUdi(contentUdi, this.value.contentData); if (dataModel === null) { - console.error("Couldn't find content model of " + contentUdi) + console.error("Couldn't find content data of " + contentUdi) return null; } @@ -591,7 +602,7 @@ var settingsData = getDataByUdi(settingsUdi, this.value.settingsData); if (settingsData === null) { - console.error("Couldnt find content settings data of " + settingsUdi) + console.error("Couldnt find settings data of " + settingsUdi) return null; } diff --git a/src/Umbraco.Web.UI.Client/src/views/components/blockcard/umb-block-card.html b/src/Umbraco.Web.UI.Client/src/views/components/blockcard/umb-block-card.html index c9cfcb825e..41e3d62886 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/blockcard/umb-block-card.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/blockcard/umb-block-card.html @@ -1,11 +1,17 @@ -
- +
+
-
+
+
+
Other
+
Other
+
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?