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

Epoca Pro dark green/grey

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

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