Error executing template "Designs/Ege/Ecom/Partials/Details_Data.cshtml"
System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
   at System.ThrowHelper.ThrowKeyNotFoundException()
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at CompiledRazorTemplates.Dynamic.RazorEngine_be1d5986148e4c699e6f46d0973b97ca.Execute() in E:\Solutions\egecarpets.dk\Files\Templates\Designs\Ege\Ecom\Partials\Details_Data.cshtml:line 291
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits ViewModelTemplate<ProductViewModel> 2 @using Dynamicweb.Rendering 3 @using Dynamicweb.Ecommerce.ProductCatalog 4 @using Dynamicweb.Frontend 5 @using EGE.Website.CustomModules.Extensions 6 @using EGE.Website.CustomModules 7 @using EGE.Website.CustomModules.Helpers 8 @using Dynamicweb.Ecommerce.Variants; 9 10 @{ 11 var product = Dynamicweb.Ecommerce.Services.Products.GetProductById(Model.Id, Model.VariantId, Model.LanguageId); 12 var variantCombinations = product.VariantCombinations; 13 var variantGroups = product.VariantGroups; 14 var qualityVariants = variantGroups.SingleOrDefault(x => x.Id == "VARGRP3"); 15 var backingVariants = variantGroups.SingleOrDefault(x => x.Id == "VARGRP2"); 16 var sampleVariants = variantGroups.SingleOrDefault(x => x.Id == "VARGRP4"); 17 var relatedSamples = Model.GetRelatedGroupById("RELGRP1"); 18 var keyDictionary = new Dictionary<string, int>(); 19 var keyValue = 0; 20 var architectFolders = Model.GetRelatedGroupByIdOfDefaultGroupInMasterLang("RELGRP3"); 21 } 22 23 <script> 24 var languageId = "@Model.LanguageId"; 25 var languageCode = "@Pageview.Area.EcomCountryCode"; 26 var architectFolderItems = [ 27 @foreach (var folder in architectFolders) 28 { 29 @:{ 30 @:"preTitle": "@folder.Name", 31 @:"title": "@folder.Name", 32 @:"id": "@folder.Id", 33 @:"imagePath": "@(ProductExtensions.GetProductImagePath(folder.Id, out bool isExternal))" 34 @:}, 35 } 36 ]; 37 38 var listJsonSampleSizeItems = [ 39 @if (sampleVariants != null) 40 { 41 foreach (var sample in sampleVariants.GetVariantOptions(Model.Id)) 42 { 43 keyDictionary.Add(sample.Id, keyValue); 44 if (sample != null) 45 { 46 @:{ 47 @:"preTitle": "@sample.Name", 48 @:"title": "@sample.Name", 49 @:"id": @keyValue, 50 @:"variantId": "@sample.Id" 51 @:} 52 if (sample != sampleVariants.GetVariantOptions(Model.Id).Last()) 53 { 54 @:, 55 } 56 keyValue++; 57 } 58 } 59 } 60 ]; 61 62 var listJsonQualityItems = [ 63 @{ 64 var qualityVariantOptions = new List<Dynamicweb.Ecommerce.Variants.VariantOption>(); 65 var isCollectionQuality = false; 66 } 67 @if (qualityVariants != null) 68 { 69 qualityVariantOptions = qualityVariants.GetVariantOptions(Model.Id).ToList(); 70 } 71 else 72 { 73 var collectionCode = product.GetFieldValue<string>("ProductCollectionCode").TrimStart(new char[] { '0' }); 74 75 if (!string.IsNullOrEmpty(collectionCode)) 76 { 77 isCollectionQuality = true; 78 79 var qualOption = new Dynamicweb.Ecommerce.Variants.VariantOption 80 { 81 Id = product.Id, 82 MediumImage = collectionCode, 83 LanguageId = product.LanguageId 84 }; 85 qualityVariantOptions.Add(qualOption); 86 } 87 } 88 @foreach (var quality in qualityVariantOptions) 89 { 90 keyDictionary.Add(quality.Id, keyValue); 91 if (quality != null) 92 { 93 var prod = Dynamicweb.Ecommerce.Services.Products.GetProductByNumber(quality.Id, quality.LanguageId); 94 // If the quality is not active in back office it should not be rendered 95 if (!prod.Active) 96 { 97 continue; 98 } 99 var productDefinedTitle = ProductExtensions.GetValueForVariantSpecField(prod, "QualityVariantTitle"); 100 var variantTitle = ""; 101 var variantImageUrl = (Constants.VariantImagePath + quality.MediumImage + ".jpg"); 102 if (!string.IsNullOrWhiteSpace(productDefinedTitle)) 103 { 104 variantTitle = productDefinedTitle; 105 var productDefinedImage = ProductExtensions.GetValueForVariantSpecField(prod, "QualityVariantImage"); 106 if (!string.IsNullOrWhiteSpace(productDefinedImage)) 107 { 108 variantImageUrl = productDefinedImage.Replace("..", "/Files"); 109 } 110 } 111 else if (isCollectionQuality && !string.IsNullOrEmpty(prod.PrimaryGroupId)) 112 { 113 var primaryGroup = Dynamicweb.Ecommerce.Services.ProductGroups.GetGroup(prod.PrimaryGroupId, prod.LanguageId); 114 variantTitle = primaryGroup.GetFieldValue<string>("M3GroupName"); 115 } 116 else 117 { 118 variantTitle = quality.Name; 119 120 } 121 @:{ 122 @:"preTitle": "@variantTitle", 123 @:"title": "@variantTitle", 124 @:"id": @keyValue, 125 @:"variantId": "@quality.Id", 126 @:"forceSelect": @isCollectionQuality.ToString().ToLower(), 127 @:"toolTip": { 128 @:"title": "@variantTitle", 129 @:"text": [{ 130 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F1Title")", 131 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F1Text")", 132 @:"link": "@SearchEngineFriendlyURLs.GetFriendlyUrl(ProductExtensions.GetValueForVariantSpecField(prod, "F1Link"))" 133 @:}, 134 @:{ 135 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F2Title")", 136 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F2Text")" 137 @:}, 138 @:{ 139 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F3Title")", 140 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F3Text")" 141 @:}, 142 @:{ 143 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F4Title")", 144 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F4Text")" 145 @:}, 146 @:{ 147 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F5Title")", 148 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F5Text")" 149 @:}, 150 @:{ 151 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F6Title")", 152 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F6Text")" 153 @:} 154 @:], 155 @:"paragraph": { 156 @:"title": "@ProductExtensions.GetValueForVariantSpecField(prod, "DescriptionTitle")", 157 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "SpecDescriptionText")" 158 @:}, 159 @:"link": "@SearchEngineFriendlyURLs.GetFriendlyUrl(ProductExtensions.GetValueForVariantSpecField(prod, "F8Link"))", 160 @:"linkText": "@ProductExtensions.GetValueForVariantSpecField(prod, "F8Title")", 161 @:"imageUrl": "@ImageUiFormatHelper.Format(variantImageUrl, 72, 100)" 162 @:} 163 @:} 164 if (qualityVariants != null && quality != qualityVariantOptions.Last()) 165 { 166 @:, 167 } 168 keyValue++; 169 } 170 } 171 ]; 172 173 var listJsonBackingItems = [ 174 @{ 175 var forceSelectBacking = false; 176 IList<VariantOption> backingVariantOptions = new List<VariantOption>(); 177 if (backingVariants == null) 178 { 179 var backingCode = product.GetFieldValue<string>("ProductBacking"); 180 if (!string.IsNullOrEmpty(backingCode)) 181 { 182 var backingOption = new Dynamicweb.Ecommerce.Variants.VariantOption 183 { 184 Id = backingCode, 185 MediumImage = backingCode, 186 LanguageId = product.LanguageId 187 }; 188 backingVariantOptions.Add(backingOption); 189 forceSelectBacking = true; 190 } 191 } 192 else 193 { 194 backingVariantOptions = backingVariants.GetVariantOptions(Model.Id); 195 } 196 } 197 @if (backingVariantOptions.Any()) 198 { 199 foreach (var backing in backingVariantOptions) 200 { 201 keyDictionary.Add(backing.Id, keyValue); 202 var prod = Dynamicweb.Ecommerce.Services.Products.GetProductByNumber(backing.Id, backing.LanguageId); 203 204 if (backing != null && prod != null) 205 { 206 var variantTitle = ProductExtensions.GetProductName(prod); 207 @:{ 208 @:"preTitle": "@ProductExtensions.GetCustomFieldValue(prod, "M3ProductName")", 209 @:"title": "@variantTitle", 210 @:"id": @keyValue, 211 @:"variantId": "@backing.Id", 212 @:"forceSelect": @forceSelectBacking.ToString().ToLower(), 213 @:"toolTip": { 214 @:"title": "@variantTitle", 215 @:"text": [{ 216 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F1Title")", 217 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F1Text")", 218 @:"link": "@SearchEngineFriendlyURLs.GetFriendlyUrl(ProductExtensions.GetValueForVariantSpecField(prod, "F1Link"))" 219 @:}, 220 @:{ 221 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F2Title")", 222 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F2Text")" 223 @:}, 224 @:{ 225 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F3Title")", 226 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F3Text")" 227 @:}, 228 @:{ 229 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F4Title")", 230 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F4Text")" 231 @:}, 232 @:{ 233 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F5Title")", 234 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F5Text")" 235 @:}, 236 @:{ 237 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F6Title")", 238 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F6Text")" 239 @:} 240 @:], 241 @:"paragraph": { 242 @:"title": "@ProductExtensions.GetValueForVariantSpecField(prod, "DescriptionTitle")", 243 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "SpecDescriptionText")" 244 @:}, 245 @:"link": "@SearchEngineFriendlyURLs.GetFriendlyUrl(ProductExtensions.GetValueForVariantSpecField(prod, "F8Link"))", 246 @:"linkText": "@ProductExtensions.GetValueForVariantSpecField(prod, "F8Title")", 247 @:"imageUrl": "@ImageUiFormatHelper.Format((Constants.VariantImagePath + backing.MediumImage + ".jpg"), 72, 100)" 248 @:} 249 @:} 250 if (backing != backingVariantOptions.Last()) 251 { 252 @:, 253 } 254 keyValue++; 255 } 256 } 257 } 258 ]; 259 260 @if (!variantGroups.Any()) 261 { 262 int countRelated = 0; 263 @:var relatedSamples = [ 264 foreach (var sample in relatedSamples) 265 { 266 @:{ 267 @:"preTitle": "@sample.Id", 268 @:"title": "@sample.Name", 269 @:"variantId": "@sample.Id", 270 @:"id": @countRelated, 271 @:"imageUrl": "@ProductExtensions.GetProductImagePath(sample.Id, out bool isExternal, "XS")" 272 @:} 273 if (sample != relatedSamples.Last()) 274 { 275 @:, 276 } 277 countRelated++; 278 } 279 @:]; 280 } 281 282 var variantCombinations = [ 283 @if (variantCombinations.Any()) 284 { 285 foreach (var variantCombination in variantCombinations) 286 { 287 var variants = variantCombination.GetVariantOptionIds(); 288 if (variants.Any()) 289 { 290 @:{ 291 @:"qualityId": @keyDictionary[variants[0]], 292 @:"sampleSizeId": @(variants.Length >= 2 ? keyDictionary[variants[1]] : 0), 293 @:"backingId": @(variants.Length >= 3 ? keyDictionary[variants[2]] : 0) 294 @:} 295 } 296 if (variantCombination != variantCombinations.Last()) 297 { 298 @:, 299 } 300 } 301 } 302 ]; 303 var combinations = [ 304 @foreach (var variantCombination in variantCombinations) 305 { 306 var variants = variantCombination.GetVariantOptionIds(); 307 if (variants.Any(x => x == "NA")) 308 { 309 continue; 310 } 311 if (variants.Any() && variants.Length > 2) 312 { 313 int qualityId; 314 int sampleSizeId; 315 int backingId; 316 @:{ 317 if (keyDictionary.TryGetValue(variants[0], out qualityId)) 318 { 319 @:"qualityId": @qualityId, 320 } 321 if (keyDictionary.TryGetValue(variants[1], out sampleSizeId)) 322 { 323 @:"sampleSizeId": @sampleSizeId, 324 } 325 if (keyDictionary.TryGetValue(variants[2], out backingId)) 326 { 327 @:"backingId": @backingId 328 } 329 @:} 330 } 331 if (variantCombination != variantCombinations.Last()) 332 { 333 @:, 334 } 335 } 336 ]; 337 338 </script>

Texture emerald green

OUTLET-3115
  • Texture emerald green
  • Texture emerald green Loading zoomable image

Product indication - Type/Concept/Collection

Thank you for your request!

We are preparing your digital files pack and you will receive an email shortly with a link to download.

Meanwhile, you can select and order free physical samples from your configuration that can be shipped to you.

{{ title }}

We are sorry, we could not get data from one or more of the products.

Recoloured

Choose quality

Chosen: {{selectedQuality.title}}
{{item.title}}

Choose backing

Chosen: {{selectedBacking.title}}
{{item.title}}

Choose sample size

Chosen: {{selectedSize.title}}
{{item.title}}
When you have chosen a quality and a backing, the available sample sizes will be shown here.

Recoloured

Choose sample

Chosen: {{selectedRelated.title}}
{{item.title}}
Model doesn't contain any ProductCategory keys

Guides and images

The Collection of the product has no catalogue or architect folder attached.
No sustainability block is chosen.

Order sample folder

Choose sample folder

Chosen: {{selectedArchitectFolder.title}}
{{item.variantId}}
{{item.title}}
Error executing template "Designs/Ege/Ecom/Partials/Details_SpecificationsAndHighlights.cshtml"
System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at CompiledRazorTemplates.Dynamic.RazorEngine_d8cc204d1ba34919846dbd5d82c709ca.Execute() in E:\Solutions\egecarpets.dk\Files\Templates\Designs\Ege\Ecom\Partials\Details_SpecificationsAndHighlights.cshtml:line 29
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits ViewModelTemplate<ProductViewModel> 2 @using Dynamicweb.Rendering 3 @using Dynamicweb.Ecommerce.ProductCatalog 4 @using EGE.Website.CustomModules 5 @using EGE.Website.CustomModules.Extensions 6 @using EGE.Website.CustomModules.Helpers 7 @using EGE.Website.CustomModules.ViewModels 8 9 @{ 10 var product = Dynamicweb.Ecommerce.Services.Products.GetProductById(Model.Id, Model.VariantId, Model.LanguageId); 11 var variantCombinations = product.VariantCombinations; 12 string specificationCode; 13 string backingCode; 14 string qualityId; 15 string conceptCode = product.GetFieldValue<string>("ProductConcept"); 16 var CurrentLang = Dynamicweb.Frontend.PageView.Current().Area.CultureInfo.Parent.NativeName.ToLower(); 17 byte[] tempBytes = System.Text.Encoding.GetEncoding("ISO-8859-8").GetBytes(CurrentLang); 18 CurrentLang = System.Text.Encoding.UTF8.GetString(tempBytes); 19 20 21 if (variantCombinations.Any()) 22 { 23 var defaultVariantCombination = variantCombinations.First(); 24 var defaultVariantCombinationIds = defaultVariantCombination.GetVariantOptionIds(); 25 qualityId = defaultVariantCombinationIds[0]; 26 27 var qualityVariantOption = Dynamicweb.Ecommerce.Services.VariantOptions.GetVariantOption(qualityId, Model.LanguageId); 28 specificationCode = EGE.Website.CustomModules.Services.VariantService.GetPropertyValue("SpecificationCode", qualityVariantOption.Id, Model.LanguageId); 29 backingCode = defaultVariantCombinationIds[2]; 30 } 31 else 32 { 33 qualityId = string.Empty; 34 specificationCode = Model.GetFieldValue<string>("ProductSpecificationCode"); 35 backingCode = Model.GetFieldValue<string>("ProductBacking"); 36 } 37 38 var specificationsFeed = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, Constants.SpecificationsFeedNavigationTag); 39 var highlightsFeed = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, Constants.HighlightsFeedNavigationTag); 40 41 SpecificationHighlightsViewModel highlightsViewModel = null; 42 SpecificationsViewModel specificationsViewModel = null; 43 44 var specFound = false; 45 if (!string.IsNullOrWhiteSpace(specificationCode) && !string.IsNullOrWhiteSpace(backingCode)) 46 { 47 var specificationsContainer = EGE.Specification.SpecificationContainer.Instance; 48 var specifications = specificationsContainer.GetSpecification(specificationCode, backingCode, Dynamicweb.Ecommerce.Common.Context.Language.Code2); 49 if (specifications != null) 50 { 51 specFound = true; 52 var highlights = specificationsContainer.GetSpecificationHighlight(specificationCode, backingCode, Dynamicweb.Ecommerce.Common.Context.Language.Code2); 53 specificationsViewModel = new EGE.Website.CustomModules.ViewModels.SpecificationsViewModel(specifications); 54 highlightsViewModel = new EGE.Website.CustomModules.ViewModels.SpecificationHighlightsViewModel(highlights); 55 } 56 } 57 58 var sustainabilityChoices = string.Empty; 59 bool hideSpecs = false; 60 bool hideSpecsManually = Pageview.AreaSettings.GetBoolean("HideProductCertificates"); 61 62 if (Model.ProductCategories.ContainsKey("CarpetCategory")) 63 { 64 var susChoiceList = (Model.ProductCategories["CarpetCategory"].Fields["PdfSustainBlocks"]?.Value as List<FieldOptionValueViewModel>); 65 66 foreach (var choice in susChoiceList) 67 { 68 sustainabilityChoices += choice.Value; 69 } 70 Boolean.TryParse((Model.ProductCategories["CarpetCategory"].Fields["HideSpecifications"]?.Value)?.ToString(), out hideSpecs); 71 } 72 73 } 74 75 @if (specFound) 76 { 77 if (specificationsFeed == null) 78 { 79 <h5>SpecificationsFeed not found. Check Nav-tag.</h5> 80 } 81 else if (highlightsFeed == null) 82 { 83 <h5>HighlightsFeed not found. Check Nav-tag.</h5> 84 } 85 else 86 { 87 if (highlightsViewModel != null) 88 { 89 <script> 90 var highlightsFeedUrl = '/api/specifications/gethighlights'; 91 var specificationHighlights = [ 92 @foreach (var highlightSection in highlightsViewModel.HighlightSections) 93 { 94 @:{ 95 @:'title': '@highlightSection.Title', 96 @:'specificationLines': [ 97 98 foreach (var highlight in highlightSection.SpecificationLines) 99 { 100 var defaulDocCount = highlight.Documents.Where(x => x.Name.ToLower().Contains(CurrentLang)).Count(); 101 @:{ 102 @:'name': '@highlight.Name', 103 @:'selectedDocument': { 104 if(defaulDocCount > 0) 105 { 106 @:'name': "@highlight.Documents.Where(x => x.Name.ToLower().Contains(CurrentLang)).FirstOrDefault().Name", 107 @:'link': '@highlight.Documents.Where(x => x.Name.ToLower().Contains(CurrentLang)).FirstOrDefault().Link', 108 } else 109 { 110 @:'name': "", 111 @:'link': '', 112 } 113 114 @:}, 115 @:'documents': [ 116 foreach (var document in highlight.Documents) 117 { 118 if (!string.IsNullOrEmpty(document.Link) && !string.IsNullOrEmpty(document.Name)) 119 { 120 @:{ 121 @:'name': "@document.Name", 122 @:'link': '@document.Link' 123 @:}, 124 } 125 } 126 @:] 127 @:}, 128 } 129 @:] 130 @:}, 131 } 132 ]; 133 </script> 134 } 135 136 <div class="product-specification-and-highlights" id="js-product-specification-and-highlights"> 137 <section class="product-specs" id="js-product-specs"> 138 139 <div class="container"> 140 <div class="product-specs__inner"> 141 <div class="row"> 142 <h1 class="product-specs__title js-alt-color">@Translate("Product details | Specifications | Title", "Product Specifications")</h1> 143 </div> 144 145 <transition name="tooltip-show"> 146 <div class="product-specs-tool-tip" v-if="toolTip !== null" id="js-product-specs-tool-tip"> 147 <div class="product-specs-tool-tip__close" @@click="closeToolTip"> 148 <svg class="icon icon--cross"> 149 <use xmlns:xlink="http://www.w3.org/1999/xlink" 150 xlink:href="@Constants.DistPath/icons/icons.svg#cross"> 151 </use> 152 </svg> 153 </div> 154 <figure class="product-specs-tool-tip__image" v-if="toolTip.imageUrl" :alt="toolTip.title"> 155 <img v-bind:src="toolTip.imageUrl" :alt="toolTip.title"> 156 </figure> 157 <div> 158 <div class="product-specs-tool-tip__title">{{toolTip.title}}</div> 159 <div class="product-specs-tool-tip__text"> 160 <div v-for="item in toolTip.text" class="product-specs-tool-tip__lines"> 161 <span v-if="item.subtitle" class="product-specs-tool-tip__subtitle">{{item.subtitle}}:</span> 162 <a v-bind:href="item.link" v-if="item.link"> 163 <span class="product-specs-tool-tip__speclink">{{item.text}}</span> 164 </a> 165 <span v-else class="product-specs-tool-tip__spec">{{item.text}}</span> 166 </div> 167 <div class="product-specs-tool-tip__paragraph"> 168 <div class="product-specs-tool-tip__subtitle">{{toolTip.paragraph.title}}</div> 169 <span>{{toolTip.paragraph.text}}</span> 170 </div> 171 </div> 172 <a class="product-specs-tool-tip__link" v-bind:href="toolTip.link">{{toolTip.linkText}}</a> 173 </div> 174 </div> 175 </transition> 176 177 <div class="row"> 178 <div class="col-xs-12"> 179 <h2 class="product-specs__subtitle"> 180 @Translate("Product details | Specifications | Subtitle", "Specifications<br>based on") 181 </h2> 182 </div> 183 </div> 184 <div class="row"> 185 <div class="col-xs-12 col-md-10 col-md-offset-1"> 186 <div class="product-specs-info"> 187 <div class="product-specs-info__name">@Model.Name</div> 188 <div class="product-specs-info__item" v-if="selectedQuality != null && selectedQuality != 0"> 189 <span class="product-specs-info__label">@Translate("Product details | Specifications | Quality", "Quality"):</span> 190 {{selectedQuality.preTitle}} 191 </div> 192 <div class="product-specs-info__item" v-if="selectedBacking != null && selectedBacking != 0"> 193 <span class="product-specs-info__label">@Translate("Product details | Specifications | Backing", "Backing"):</span> 194 {{selectedBacking.preTitle}} 195 </div> 196 </div> 197 </div> 198 </div> 199 <div class="row"> 200 <div class="col-xs-12 col-md-6 col-md-offset-1"> 201 <div class="product-specs-quality"> 202 <h3 class="product-specs-quality__title">@Translate("Product details | Specifications | Quality", "Quality")</h3> 203 <div class="product-specs-list"> 204 <div class="product-specs-list-item" v-if="availableOptions.quality" 205 :class="{'product-specs-list-item--selected': selectedQuality === item ,'product-specs-list-item--hide':availableOptions.quality[item.id]===false}" 206 v-for="item in qualityItems"> 207 <figure class="product-specs-list-item__image" 208 @@click="selectOption(item,'selectedQuality')"> 209 <img :src="item.toolTip.imageUrl" :alt="item.title" width="100" height="72"> 210 <svg class="icon icon--checkmark"> 211 <use xmlns:xlink="http://www.w3.org/1999/xlink" 212 xlink:href="@Constants.DistPath/icons/icons.svg#checkmark"> 213 </use> 214 </svg> 215 </figure> 216 <div class="product-specs-list-item__title">{{item.title}}</div> 217 <div class="product-specs-list-item__read-more" v-if="item.toolTip" 218 @@click="showToolTip(item.toolTip, $event)"> 219 @Translate("Read more", "Read more") 220 </div> 221 </div> 222 </div> 223 </div> 224 </div> 225 <div class="col-xs-12 col-md-3 col-md-offset-1"> 226 <div class="product-specs-backing"> 227 <h3 class="product-specs-backing__title" v-if="Object.keys(backingItems).length !== 0">@Translate("Product details | Specifications | Backing", "Backing")</h3> 228 <div class="product-specs-list"> 229 <div class="product-specs-list-item" v-if="availableOptions.backing" 230 :class="{'product-specs-list-item--selected': selectedBacking === item ,'product-specs-list-item--hide':availableOptions.backing[item.id]===false}" 231 v-for="item in backingItems"> 232 <figure class="product-specs-list-item__image" 233 @@click="selectOption(item,'selectedBacking')"> 234 <img :src="item.toolTip.imageUrl" alt="" width="100" height="72"> 235 <svg class="icon icon--checkmark"> 236 <use xmlns:xlink="http://www.w3.org/1999/xlink" 237 xlink:href="@Constants.DistPath/icons/icons.svg#checkmark"> 238 </use> 239 </svg> 240 </figure> 241 <div class="product-specs-list-item__title">{{item.title}}</div> 242 <div class="product-specs-list-item__read-more" v-if="item.toolTip" 243 @@click="showToolTip(item.toolTip, $event)"> 244 @Translate("Read more", "Read more") 245 </div> 246 </div> 247 </div> 248 </div> 249 </div> 250 </div> 251 @if (!hideSpecs) 252 { 253 <div class="product-specs-buttons"> 254 <div class="button-double product-specs-buttons"> 255 <form method="post" action="/api/specifications/getpdf"> 256 <input type="hidden" v-if="selectedBacking != null" name="backingCode" :value="selectedBacking.variantId" /> 257 <input type="hidden" v-if="selectedBacking != null" name="backingName" :value="selectedBacking.title" /> 258 <input type="hidden" v-if="selectedQuality != null" name="qualityName" :value="selectedQuality.title" /> 259 <input type="hidden" name="collectionCode" value="@Model.GetFieldValue("ProductCollectionCode")" /> 260 261 @if (variantCombinations.Any()) 262 { 263 <input type="hidden" v-if="selectedQuality != null" name="qualityId" :value="selectedQuality.variantId" /> 264 } 265 else 266 { 267 <input type="hidden" name="specificationCode" value="@specificationCode" /> 268 } 269 <input type="hidden" name="nationalityCode" value="@Dynamicweb.Ecommerce.Common.Context.Language.Code2" /> 270 <input type="hidden" name="areaId" value="@Pageview.AreaID" /> 271 <input type="hidden" name="productName" value="@Model.Name" /> 272 <input type="hidden" name="sustainabilityChoice" value="@sustainabilityChoices" /> 273 <button type="submit" title="" property="url" class="button button--ghost button--gold" data-text="Download specifications" :class="{ 'button--error':showDownloadFullSpecificationsError }" @@click="downloadFullSpecifications" ref="showFullSpecificationsSubmitButton"> 274 <span class="button__error-message">@Translate("Product details | Specifications | View full specifications error message", "Please choose both a quality and backing above to view full specifications")</span> 275 <span class="button__content"> 276 <span class="button__icon"> 277 <svg class="svg-icon button__svg"> 278 <use xlink:href="@Constants.DistPath/icons/icons.svg#arrow-down-in-circle"></use> 279 </svg> 280 </span> 281 <span class="button__text"> 282 @Translate("Product details | Specifications | Download full specifications", "Download full specifications") 283 </span> 284 </span> 285 </button> 286 </form> 287 <button type="button" class="button button--solid button--gold " data-text="@Translate("Product details | Specifications | View full specifications", "View full specifications")" @@click="viewFullSpecs" data-service="@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(specificationsFeed.ID)" data-highlights-service="@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(highlightsFeed.ID)" data-specification-code="@specificationCode" :class="{ 'button--error':showFullSpecificationsError }"> 288 <span class="button__error-message">@Translate("Product details | Specifications | View full specifications error message", "Please choose both a quality and backing above to view full specifications")</span> 289 <span class="button__content"> 290 <span class="button__icon"> 291 <svg class="svg-icon button__svg"> 292 <use xlink:href="@Constants.DistPath/icons/icons.svg#arrow"></use> 293 </svg> 294 </span> 295 <span class="button__text">@Translate("Product details | Specifications | View full specifications", "View full specifications")</span> 296 </span> 297 </button> 298 </div> 299 </div> 300 } 301 </div> 302 </div> 303 </section> 304 305 @if (!hideSpecs) 306 { 307 308 if (specificationsViewModel != null && highlightsViewModel != null) 309 { 310 <div id="js-spec-list" class="overlay-template"> 311 @TemplateHelper.RenderPartial("Feeds/SpecificationsFeed.cshtml", specificationsViewModel) 312 </div> 313 314 if (conceptCode != "10" && !hideSpecsManually) 315 { 316 <transition name="product-highlights-fade"> 317 318 <section class="product-highlights"> 319 <div class="container"> 320 <div class="product-highlights__inner"> 321 <div class="row"> 322 <div class="col-xs-12 col-md-2"> 323 <h2 class="product-highlights__subtitle">@Translate("Product details | Specifications | Specification highlights", "Specification<br/>highlights")</h2> 324 </div> 325 <div class="col-xs-12 col-md-10"> 326 <div class="product-highlights__options"> 327 <div v-for="category in specificationHighlights"> 328 <h3 class="product-highlights__options-title">{{category.title}}</h3> 329 <div class="product-highlights__options-list"> 330 <div class="product-highlights__options-list-item" 331 v-for="line in category.specificationLines"> 332 <span class="product-highlights__options-list-item-label">{{line.name}}</span> 333 <span class="product-highlights__options-list-item-dropdown"> 334 <div class="dropdown dropdown--not-standalone"> 335 <div class="dropdown__header" 336 v-bind:class="{ 'dropdown__header-active': line.showDropdown}" 337 @@click="toggleDropdown(line)"> 338 <span class="dropdown__type"> 339 <span v-if="!line.selectedValue && line.defaultValue"> 340 {{line.defaultValue.name}} 341 </span> 342 <span v-if="line.selectedValue"> 343 {{line.selectedValue.name}} 344 </span> 345 </span> 346 <span class="dropdown__direction"> 347 <figure class="dropdown__icon" 348 v-bind:class="{ 'dropdown__icon-active': line.showDropdown}"> 349 <svg class="svg-icon dropdown__icon-arrow"> 350 <use xlink:href="../../dist/icons/icons.svg#arrow-down-in-circle"></use> 351 </svg> 352 </figure> 353 </span> 354 </div> 355 356 <div class="dropdown__body" 357 v-bind:class="{ 'dropdown__body-active': line.showDropdown}" 358 v-if="line.showDropdown != undefined"> 359 <div class="dropdown__body-header" 360 v-bind:class="{ 'dropdown__body-header-active': line.showDropdown}" 361 @@click="toggleDropdown(line)"> 362 <span class="dropdown__type dropdown__type-body"> 363 <span v-if="!line.selectedValue.name"> 364 {{line.defaultValue.name}} 365 </span> 366 <span v-if="line.selectedValue.name"> 367 {{line.selectedValue.name}} 368 </span> 369 </span> 370 <span class="dropdown__direction"> 371 <figure class="dropdown__icon dropdown_icon" 372 v-bind:class="{ 'dropdown__icon-active': line.showDropdown}"> 373 <svg class="svg-icon dropdown__icon-arrow"> 374 <use xlink:href="../../dist/icons/icons.svg#arrow-down-in-circle"></use> 375 </svg> 376 </figure> 377 </span> 378 </div> 379 <hr class="dropdown__body-hr" /> 380 <div class="dropdown__select-container"> 381 <div class="dropdown__select-list"> 382 <div class="dropdown__select-list-item" 383 v-for="doc in line.documents" 384 @@click="itemListSelected(line,doc)"> 385 <label class="dropdown__select-label">{{doc.name}}</label> 386 </div> 387 </div> 388 </div> 389 </div> 390 </div> 391 <a v-if="line.selectedValue" :href="line.selectedValue.link" download 392 class="product-highlights__options-list-item-link">@Translate("Global | Download", "Download")</a> 393 </span> 394 </div> 395 </div> 396 </div> 397 </div> 398 </div> 399 </div> 400 </div> 401 </div> 402 </section> 403 </transition> 404 } 405 } 406 } 407 </div> 408 } 409 } 410 else 411 { 412 <p>No specifications found with Backing: <b>@backingCode</b> & <b>Specificationcode: @specificationCode</b></p> 413 }

Need to know more?

Let's help you move on

Are you planning a project, let's help you through the entire process, from idea to unique carpet solution.

Fill in your details and we'll revert to you or find your closest contact 

Trends & News, yes please