Error executing template "Designs/innovationliving/eCom/Product/innovationliving.cshtml"System.ArgumentNullException: Value cannot be null.Parameter name: valueat System.Web.Caching.CacheEntry..ctor(String key, Object value, CacheDependency dependency, CacheItemRemovedCallback onRemovedHandler, DateTime utcAbsoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, Boolean isPublic, CacheInternal cache)at System.Web.Caching.CacheInternal.DoInsert(Boolean isPublic, String key, Object value, CacheDependency dependencies, DateTime utcAbsoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback, Boolean replace)at System.Web.Caching.AspNetCache.Insert(String key, Object item, CacheInsertOptions options)at System.Web.Caching.Cache.Insert(String key, Object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration)at Co3.IL.Dw.Services.ProductService.GetAllProductDeliveryInfo(User user) in C:\Data\Development\git\innovationliving-master\Co3.IL.Dynamicweb\Services\ProductService.cs:line 347at Co3.IL.Dw.Services.ProductService.GetProductDeliveryInfo(Product product) in C:\Data\Development\git\innovationliving-master\Co3.IL.Dynamicweb\Services\ProductService.cs:line 603at CompiledRazorTemplates.Dynamic.RazorEngine_ab0ae9c64eb7467ca0b34ad00d4e9d46.Execute() in D:\Sites\innovationliving.com\files\Templates\Designs\innovationliving\eCom\Product\innovationliving.cshtml:line 842at 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.b__0(TextWriter writer)at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Co3.Espresso.Website.TemplateBases.Pages.PageBase 2 @using Dynamicweb.Ecommerce.Prices 3 @using Dynamicweb.Ecommerce.Common.eCom7 4 @using Dynamicweb.Rendering 5 @using System.Web 6 @using Dynamicweb.Frontend 7 @using Co3.Espresso.Base.Models 8 @using Co3.Espresso.Website.Services 9 @using Co3.IL.Dw.Models 10 @using Dynamicweb.Ecommerce.Products 11 @using Dynamicweb.Ecommerce.Products.Categories 12 @using ProductService = Co3.Espresso.Website.Services.ProductService 13 @using System.Collections.Generic; 14 @using Dynamicweb.Admin.dk.dynamicweb.templates 15 @using System.Text.RegularExpressions 16 @using Co3.Espresso.Base.Extensions 17 @using Co3.Espresso.Website.Models.FrontEnd.Elements 18 @using Dynamicweb.Admin 19 @using Dynamicweb.Ecommerce.Common 20 @using Co3.IL.Dw.Models.Frontend.User 21 22 @using System.Globalization 23 @using System.Security.Cryptography.X509Certificates 24 @using Co3.Espresso.Base.Extensions 25 @using Co3.Espresso.Website.Models.FrontEnd 26 @using Co3.Espresso.Website.Services 27 @using Dynamicweb.Content 28 @using Dynamicweb.Ecommerce.Products 29 @using Dynamicweb.Ecommerce.Products.Categories 30 @using Dynamicweb.Frontend 31 @using Dynamicweb.Rendering 32 @using EcomContext = Dynamicweb.Ecommerce.Common.Context 33 @using ProductService = Co3.Espresso.Website.Services.ProductService 34 @using Co3.IL.Dw.Models 35 @using System.Web 36 @using Co3.IL.Dw.Models.Frontend.User 37 @using Dynamicweb.Admin 38 @using Dynamicweb.Content.Items 39 @using Dynamicweb.Ecommerce.International 40 @using Dynamicweb.Indexing.Notifications 41 @using Dynamicweb.Rendering.Translation 42 @using dwPrices = Dynamicweb.Ecommerce.Prices 43 44 @{ 45 ProductCategoryService productCategory = new ProductCategoryService(); 46 } 47 48 49 @functions { 50 51 public string getCountryCodeFromArea(Area area) 52 { 53 RegionInfo regionInfo = new RegionInfo(area.CultureInfo.LCID); 54 return regionInfo.TwoLetterISORegionName; 55 } 56 57 public static string GetStandardCollapseToggleTextExpand() 58 { 59 return "Se mere"; 60 } 61 62 public static string GetStandardCollapseToggleTextCollapse() 63 { 64 return "Se mindre"; 65 } 66 67 public static string getAmountFormatted(double amount, Currency userCurrency, bool isUserAuthenticated) 68 { 69 string returnValue = Co3.Espresso.Website.Services.PriceService.Instance.FormatPrice( amount ); 70 if ( isUserAuthenticated && !UserContext.Current.ShowRetailPrice ) 71 { 72 returnValue = dwPrices.Price.GetDoublePriceInfo( amount, userCurrency ).PriceWithoutVATFormatted; 73 } 74 return returnValue; 75 } 76 } 77 78 @helper ProductDescription(string sectionClasses = "e-section", bool sectionCollapse = false, string contentClasses = null, string heading = null, string content = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null) 79 { 80 if ( string.IsNullOrEmpty(content) == false ) 81 { 82 ClassList headingClassList = new ClassList(); 83 headingClassList.AddClasses("col-12"); 84 ClassList contentClassList = new ClassList(); 85 contentClassList.AddClasses("col-12"); 86 87 @sectionStart(sectionClasses: sectionClasses, sectionCollapse: sectionCollapse, contentClasses: contentClasses, collapseToggleTextCollapse: collapseToggleTextCollapse, collapseToggleTextExpand: collapseToggleTextExpand) 88 89 if ( string.IsNullOrEmpty(heading) == false ) 90 { 91 <div class="@headingClassList"> 92 <h2>@heading</h2> 93 </div> 94 } 95 <div class="@contentClassList"> 96 @content 97 </div> 98 99 @sectionEnd()100 }101 }102103104 @helper ProductVideo(string sectionClasses = "e-section", string contentClasses = null, string heading = null, string videoURL = null)105 {106 if ( string.IsNullOrEmpty(videoURL) == false )107 {108 ClassList headingClassList = new ClassList();109 headingClassList.AddClasses("col-12");110 ClassList contentClassList = new ClassList();111 contentClassList.AddClasses("col-12");112113114 @sectionStart(sectionClasses: sectionClasses, contentClasses: contentClasses)115116 if ( string.IsNullOrEmpty(heading) == false )117 {118 <div class="@headingClassList">119 <h2>@heading</h2>120 </div>121 }122123 <div class="@contentClassList">124 <div class="embed-responsive embed-responsive-16by9 mb-2">125 <iframe class="embed-responsive-item" src="@videoURL" width="1080" height="608" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>126 </div>127 </div>128 @sectionEnd()129 }130 }131132 @helper ProductRelatedProducts(string sectionClasses = "e-section", string contentClasses = null, string heading = null,133 IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > productLoop = null)134 {135 if ( productLoop != null && productLoop.Any() == true )136 {137 ClassList headingClassList = new ClassList();138 headingClassList.AddClasses("col-12");139 ClassList contentClassList = new ClassList();140 contentClassList.AddClasses("col-12");141142 @sectionStart(sectionClasses: sectionClasses, contentClasses: contentClasses)143144 if ( string.IsNullOrEmpty(heading) == false )145 {146 <div class="@headingClassList">147 <h2 class="text-center">@heading</h2>148 </div>149 }150 <div class="@contentClassList">151 <div class="e-products mb-2">152 <div class="row">153 @{154 string productlistItemClassList = ProductlistService.Instance.GetGridItemWidth(null).ToResponsiveClasses();155 }156 @foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product in productLoop )157 {158 @ProductlistItem(product, productlistItemClassList)159 }160 </div>161 </div>162 </div>163164 @sectionEnd()165 }166 }167168 @helper ProductRelatedComfortProducts(string sectionClasses = "e-section", string contentClasses = null, string heading = null, string introduction = null,169 IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > productLoop = null, Product mainProduct = null)170 {171 if ( productLoop != null && productLoop.Any() == true )172 {173 ClassList headingClassList = new ClassList();174 headingClassList.AddClasses("col-12");175 ClassList contentClassList = new ClassList();176 contentClassList.AddClasses("col-12");177178 @sectionStart(sectionClasses: sectionClasses, contentClasses: contentClasses)179180 if ( string.IsNullOrEmpty(heading) == false )181 {182 <div class="@headingClassList">183 <h2 class="mb-0 text-center">@heading</h2>184 @if ( string.IsNullOrEmpty(introduction) == false )185 {186 <h4 class="mb-1 mt-1 text-center">@introduction</h4>187 }188 </div>189 }190 <div class="@contentClassList">191 <div class="e-products mb-2">192 <div class="row">193 @{194 string productlistItemClassList = ProductlistService.Instance.GetGridItemWidth(null).ToResponsiveClasses();195 }196 @if ( mainProduct != null )197 {198 var comfortName = mainProduct.GetCategoryValue("FinalProduct", "RelComfortName");199 var comfortFirmRate = mainProduct.GetCategoryValue("FinalProduct", "RelComfortFirmRate");200 var comfortDesc = mainProduct.GetCategoryValue("FinalProduct", "RelComfortDesc").ToString().StripHtml();201 string comfortImage = ImageService.Instance.GetImageURL("/Files/Images/" + mainProduct.GetCategoryValue("FinalProduct", "RelComfortImage"), 400, 400, 1);202203 <div class="@productlistItemClassList il-comfort-related-group-item">204 <div class="active bg-white e-products-item">205 <div class="e-products-item-container">206 <div class="e-products-item-text-container text-center">207 <h3>208 @comfortName209 </h3>210 <p class="il-comfort-related-group-item-firmness mb-0">211 <strong>@Translation.GetTranslation("eCom Product - Firmness rating - Text"):</strong> @comfortFirmRate</p>212 <p>@comfortDesc</p>213 </div>214 <div class="e-products-item-image-container">215 <div class="e-products-item-image-wrapper">216 <img src="@comfortImage" alt="" class="e-products-item-image">217 </div>218 </div>219220 </div>221 </div>222 </div>223 }224225226227 @foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product in productLoop )228 {229 @ProductlistRelatedComfortItem(product, productlistItemClassList)230 }231 </div>232 </div>233 </div>234235 @sectionEnd()236 }237 }238239 @helper ProductlistItem(RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product, string productlistItemClassList = null)240 {241 if ( product != null )242 {243 string currentDomain = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Host;244 //ProductDeliveryInfo productDeliveryInfo = Co3.IL.Dw.Services.ProductService.Instance.GetProductDeliveryInfo(product.GetString("Ecom:Product:Field.BaseSKU.Value"));245246 Dynamicweb.Ecommerce.Products.ProductService dwProductService = new Dynamicweb.Ecommerce.Products.ProductService();247 Dynamicweb.Ecommerce.Products.Product productObject = dwProductService.GetProductById( product.GetString( "Ecom:Product.ID" ), product.GetString( "Ecom:Product.VariantID" ), Dynamicweb.Ecommerce.Common.Context.LanguageID, false );248249 bool isUserAuthenticated = PageView.Current().User != null;250 Dictionary<string, string> groups = new Dictionary< string, string >();251 List<string> userGroups = new List<string>();252 string textile = string.IsNullOrEmpty( product.GetString( "DefaultTextile" ) ) == false ? product.GetString( "DefaultTextile" ) : "521";253 ProductPrice prices = Co3.IL.Dw.Services.ProductService.Instance.GetProductPriceInfo(product.GetString( "Ecom:Product.Number" ), textile);254255 double resellerPrice;256 double.TryParse( prices.ResellerPrice.ToString(), out resellerPrice );257258 double retailPrice;259 double.TryParse( prices.RetailPrice.ToString(), out retailPrice );260261 bool isModeRetail = UserContext.Current.ShowRetailPrice;262 bool showPriceArea = isModeRetail;263264 if (isUserAuthenticated)265 {266 userGroups = PageView.Current().User.Groups.Select(g => g.Name).ToList();267268 foreach (Dynamicweb.Security.UserManagement.Group group in PageView.Current().User.Groups )269 {270 groups.Add(group.Name, group.ID.ToString());271 }272273 if ( groups.ContainsKey( "DM only" ) )274 {275 isUserAuthenticated = false;276 isModeRetail = false;277 }278 if ( groups.ContainsKey( "D" ) )279 {280 isUserAuthenticated = false;281 isModeRetail = false;282 }283 if ( groups.ContainsKey( "C" ) )284 {285 isUserAuthenticated = false;286 showPriceArea = true;287 }288 if ( groups.ContainsKey( "B" ) )289 {290 isUserAuthenticated = true;291 showPriceArea = true;292 }293 if ( groups.ContainsKey( "A" ) )294 {295 isUserAuthenticated = true;296 showPriceArea = true;297 }298 }299300 ProductDeliveryInfo productDeliveryInfo = null;301 if ( productObject != null )302 {303 productDeliveryInfo = Co3.IL.Dw.Services.ProductService.Instance.GetProductDeliveryInfo( productObject );304 }305 else306 {307 productDeliveryInfo = Co3.IL.Dw.Services.ProductService.Instance.GetProductDeliveryInfo(product.GetString("Ecom:Product:Field.BaseSKU.Value"));308 }309310311 List< Product > inStock = new List< Product >();312 List< dynamic > inStockTextiles = new List< dynamic >();313314 bool isBlackLabelProduct = false;315316 if ( productDeliveryInfo != null && productDeliveryInfo.InStock != null && productDeliveryInfo.InStock.Any() )317 {318 inStock = productDeliveryInfo.InStock;319 }320321 if ( productDeliveryInfo != null && productDeliveryInfo.BlackTextiles != null && productDeliveryInfo.BlackTextiles.Any() )322 {323 inStock = productDeliveryInfo.BlackTextiles;324 isBlackLabelProduct = true;325 }326327 if ( !isBlackLabelProduct )328 {329 isBlackLabelProduct = product.GetString( "Ecom:Product:Field.PIMGroup.Value" ) == "95B";330 }331332 if ( productDeliveryInfo != null && productDeliveryInfo.InStock != null)333 {334 inStock = productDeliveryInfo.InStock.Any() ? productDeliveryInfo.InStock : inStock;335 }336337 foreach ( Product productionProduct in inStock )338 {339 string textileImageClean = productionProduct.GetCategoryValue("Textile", "TextileColorImage")?.ToString();340 string textileImagePath = "/files/images/" + textileImageClean;341 inStockTextiles.Add(new342 {343 color = productionProduct.GetCategoryValue("Textile", "TextileColorHex")?.ToString()344 });345 }346347 string resellerPriceFormatted = Co3.Espresso.Website.Services.PriceService.Instance.FormatPrice( resellerPrice );348 if ( isUserAuthenticated )349 {350 Currency userCurrency = new CurrencyService().GetCurrenciesForCode( PageView.Current().User.Currency ).FirstOrDefault(c => c.Code == PageView.Current().User.Currency );351 if ( userCurrency != null )352 {353 resellerPriceFormatted = getAmountFormatted( resellerPrice, userCurrency, true );354 }355 }356357 string position = "1";358 string hoverPosition = String.Empty;359 if ( string.IsNullOrEmpty( product.GetString( "Ecom:Product:Field.Positions.Value" ) ) == false )360 {361 position = product.GetString( "Ecom:Product:Field.Positions.Value" ).Split( ',' )[ 0 ];362 if ( product.GetString( "Ecom:Product:Field.Positions.Value" ).Split( ',' ).Last() != position )363 {364 hoverPosition = product.GetString( "Ecom:Product:Field.Positions.Value" ).Split( ',' ).Last();365 }366 }367368 dynamic productData = new369 {370 isModeRetail = isModeRetail || userGroups.Contains("C"),371 showPriceArea = showPriceArea,372 isUserAuthenticated = isUserAuthenticated,373 resellerPrice = resellerPrice,374 resellerPriceFormatted = resellerPriceFormatted,375 hideResellerPrice = userGroups.Contains("C") == true,376 retailPrice = retailPrice,377 retailPriceFormatted = Co3.Espresso.Website.Services.PriceService.Instance.FormatPrice( retailPrice ),378 id = product.GetString("Ecom:Product.ID"),379 variantId = product.GetString("Ecom:Product.VariantID"),380 url = ProductService.Instance.GetProductLink(product.GetString("Ecom:Product.PrimaryOrFirstGroupID"), product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.VariantID")),381 number = product.GetString("Ecom:Product.Number"),382 name = ProductService.Instance.GetName(product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.VariantID")),383 imageDefault = ImageService.Instance.GetImageURL(product.GetString("Ecom:Product.ImageDefault.Clean"), 400, 400, 5),384 //Ecom:Product.ImageDefault.Clean385 price = "0",// ProductService.Instance.GetPrice(product.GetString("Ecom:Product.ID")),386 descriptionShortExtra01 = product.GetString("Ecom:Product:Field.DescriptionShortExtra01"),387 inStockTextiles = inStockTextiles,388 inStockTextilesTotal = inStockTextiles.Count,389 includePIMPacks = product.GetString("Ecom:Product.CategoryField.FinalProduct.IncludePIMPacks.Value.Clean") == "True",390 cylindo = new391 {392 sku = product.GetString("Ecom:Product:Field.BaseSKU.Value"),393 legFinish = product.GetString("Ecom:Product:Field.FeatureGroup1.Value"),394 fallbackImage = string.IsNullOrEmpty(product.GetString( "Ecom:Product.ImageDefault.Clean" )) == false ? string.Format( "{0}{1}", currentDomain, ImageService.Instance.GetImageURL( product.GetString( "Ecom:Product.ImageDefault.Clean" ), 400, 400, 5 ) ) : string.Empty,395 position = position,396 hoverPosition = hoverPosition,397 fabric = string.IsNullOrEmpty(product.GetString("DefaultTextile")) == false ? product.GetString("DefaultTextile") : "521"398 },399 stock = new400 {401 id = product.GetString("Ecom:Product:Stock.ID"),402 quantity = product.GetString("Ecom:Product.Stock"),403 text = product.GetString("Ecom:Product:Stock.Text"),404 delivery = product.GetString("Ecom:Product:Stock.DeliveryText")405 }406 };407408 string cssOpacity = string.Empty;409 if ( productData.inStockTextilesTotal == 0 )410 {411 cssOpacity = "opacity-zero";412 }413414 <div class="@productlistItemClassList">415 <div class="e-products-item js-e-products-item bg-white js-e-products-item-@productData.id js-e-block-link e-block-link" data-variant-id="@productData.variantId">416 <div class="e-products-item-container">417418 <div class="e-products-item-text-container text-center small">419 @*<h3 class="e-products-item-name mb-0"><a href="@productData.url">@productData.name</a></h3>420 <small class="il-colors-instock mt-1 mb-1 d-block @cssOpacity"><a href="@productData.url">@productData.inStockTextilesTotal colors in stock</a></small>421 <ul class="il-color-list @cssOpacity">422 @{423 int counter = 0;424 }425 @foreach ( var inStockTextile in productData.inStockTextiles )426 {427 if ( counter < 8) {428 <li style="background-color: #@inStockTextile.color;"></li>429 }430 counter++;431 }432 @if ( productData.inStockTextiles.Count > 8 )433 {434 <li class="morethanmax"></li>435 }436 </ul>*@437438 <div class="js-cylindo-viewer cylindo-viewer" id="@productData.id" data-use-pim-packs="@productData.includePIMPacks" data-sku="@productData.cylindo.sku" data-position="@productData.cylindo.position" data-hover-position="@productData.cylindo.hoverPosition" data-leg-finish="@productData.cylindo.legFinish" data-fabric="@productData.cylindo.fabric" data-fallback-image="@productData.cylindo.fallbackImage">439 <div class="hover"></div>440 </div>441442 @if ( isBlackLabelProduct )443 {444 <img src="/Files/Templates/Designs/innovationliving/_assets/img/black-label-logo.svg" class="il-black-label"/>445 }446447 <h3 class="e-products-item-name m-0"><a href="@productData.url">@productData.name</a></h3>448449 @*<p class="e-products-item-text mb-0 @cssOpacity">450 <a href="@productData.url">451 More colors available452 </a>453 </p>*@454 @if ( productData.showPriceArea )455 {456 if ( productData.isModeRetail )457 {458 <div class="e-product-price font-weight-bold h4 mb-0 mt-1">459 @productData.retailPriceFormatted460 </div>461 }462 else463 {464 if ( productData.isUserAuthenticated )465 {466 <div class="e-product-price font-weight-bold h4 mb-0 mt-1">467 @productData.retailPriceFormatted468 </div>469470 if ( !productData.hideResellerPrice )471 {472 @productData.resellerPriceFormatted473 }474 }475 }476 }477 </div>478 </div>479 </div>480 </div>481 }482 }483484485 @helper ProductlistRelatedComfortItem(RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product, string productlistItemClassList = null)486 {487 if ( product != null )488 {489 dynamic productData = new490 {491 id = product.GetString("Ecom:Product.ID"),492 variantId = product.GetString("Ecom:Product.VariantID"),493 url = ProductService.Instance.GetProductLink(product.GetString("Ecom:Product.PrimaryOrFirstGroupID"), product.GetString("Ecom:Product.ID")),494 name = product.GetString("Ecom:Product.CategoryField.FinalProduct.RelComfortName.Value.Clean"),495 imageDefault = ImageService.Instance.GetImageURL(product.GetString("Ecom:Product.CategoryField.FinalProduct.RelComfortImage.Value.Clean"), 400, 400, 1),496 description = product.GetString("Ecom:Product.CategoryField.FinalProduct.RelComfortDesc.Value.Clean").StripHtml(),497 firmness = product.GetString("Ecom:Product.CategoryField.FinalProduct.RelComfortFirmRate.Value.Clean")498 };499500 <div class="@productlistItemClassList il-comfort-related-group-item">501 <div class="e-products-item js-e-products-item js-e-products-item-@productData.id js-e-block-link e-block-link bg-white" data-variant-id="@productData.variantId">502 <div class="e-products-item-container">503 <div class="e-products-item-text-container text-center">504 <h3>505 <a href="@productData.url">506 @productData.name507 </a>508 </h3>509 <p class="il-comfort-related-group-item-firmness mb-0">510 <strong>@Translation.GetTranslation("eCom Product - Firmness rating - Text"):</strong> @productData.firmness</p>511 <p>@productData.description</p>512 </div>513 <div class="e-products-item-image-container">514 <a class="e-products-item-image-wrapper" href="@productData.url">515 <img src="@productData.imageDefault" alt="" class="e-products-item-image">516 </a>517 </div>518519 </div>520 </div>521 </div>522 }523 }524525526 @helper sectionStart(string sectionClasses = "e-section", string contentClasses = null, bool sectionCollapse = false, string sectionId = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null)527 {528 sectionId = string.IsNullOrEmpty(sectionId) ? Guid.NewGuid().ToString("N") : sectionId;529 ClassList sectionClassList = new ClassList();530 sectionClassList.AddClasses(sectionClasses);531 ClassList contentClassList;532533 if ( contentClasses == null )534 {535 contentClassList = Co3.Espresso.Website.Services.PageService.Instance.GetResponsiveClassesFromPageItem(PageView.Current().Page.Item);536 }537 else538 {539 contentClassList = new ClassList();540 contentClassList.AddClasses(contentClasses);541 }542543 // TODO: Split collapse logic into separate helper function.544 string collapseId = Guid.NewGuid().ToString("N");545 ClassList collapseToggleClassList = new ClassList();546 if ( sectionCollapse )547 {548 sectionClassList.AddClasses("p-section-collapse js-p-section-collapse");549 collapseToggleClassList.AddClasses(contentClasses);550 collapseToggleClassList.AddClasses("p-section-collapse-toggle collapsed order-last text-center");551 contentClassList.AddClasses("p-section-collapse-content collapse is-md");552 }553554 @:<section class="@sectionClassList" id="@sectionId">555 @:<div class="container-fluid">556 @:<div class="row">557558 // TODO: Split collapse logic into separate helper function.559 if ( sectionCollapse )560 {561 <div class="@collapseToggleClassList" data-toggle="collapse" data-target="#@collapseId">562 <button class="btn btn-primary p-section-collapse-toggle-btn" type="button">563 <i class="material-icons p-section-collapse-toggle-icon">keyboard_arrow_down</i>564 </button>565 <small class="h4 p-section-collapse-toggle-text" data-expand-text="@( string.IsNullOrEmpty(collapseToggleTextExpand) ? GetStandardCollapseToggleTextExpand() : collapseToggleTextExpand)" data-collapse-text="@( string.IsNullOrEmpty(collapseToggleTextCollapse) ? GetStandardCollapseToggleTextCollapse() : collapseToggleTextCollapse)"></small>566 </div>567 }568569 @:<div class="@contentClassList" id="@collapseId">570 @:<div class="row">571 }572573 @helper sectionEnd()574 {575 @:</div>576 @:</div>577 @:</div>578 @:</div>579 @:</section>580 }581582 @* Custom IL instock/production *@583 @helper getProductionStockAndProduction(List< Product > ProductList, ProductCategoryService productCategory, Dictionary<string,dynamic> jsonFabrics = null, IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > fieldLoop = null)584 {585 foreach ( Product productionProduct in ProductList )586 {587 string textileNumber = productionProduct.Number;588 string textileName = productionProduct.GetCategoryValue("Textile", "TextileName")?.ToString();589 string textileImageClean = productionProduct.GetCategoryValue("Textile", "TextileColorImage")?.ToString();590 string textileImagePath = "/files/images/" + textileImageClean;591 string textileImage = ImageService.Instance.GetImageURL(textileImagePath?.ToString(), 100, 100);592593 dynamic displayFields = new List< dynamic >();594595 foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem groupItem in fieldLoop )596 {597 if ( groupItem.GetLoop( "Fields" ).Count > 0 )598 {599 if ( groupItem.GetString( "Ecom:FieldDisplayGroup.ID" ) == "7" )600 {601 foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem fieldItem in groupItem.GetLoop( "Fields" ) )602 {603 if(!string.IsNullOrEmpty(productionProduct.GetCategoryValue("Textile", fieldItem.GetString("Ecom:FieldDisplayGroup.Field.TemplateTag"))?.ToString()))604 {605 if(!string.IsNullOrEmpty(productionProduct.GetCategoryValue("Textile", fieldItem.GetString("Ecom:FieldDisplayGroup.Field.TemplateTag"))?.ToString()))606 {607 //string value = productionProduct.GetCategoryValue( "Textile", fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) )?.ToString();608 string label = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );609 string value = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct(productionProduct, fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Id"));610611 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" )612 {613 value = ImageService.Instance.GetImageURL(string.Format("/files/images/{0}", value), 300, 300);614 label = string.Empty;615 }616 displayFields.Add( new617 {618 label = label,619 type = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.TypeName"),620 value = value621 } );622 }623 }624 }625 }626 }627 }628629 if ( productionProduct.Number != null && !string.IsNullOrEmpty(textileName) )630 {631 if ( !jsonFabrics.ContainsKey( textileNumber ) )632 {633 jsonFabrics[ textileNumber ] = new List< dynamic >();634 jsonFabrics[ textileNumber ].Add( new635 {636 number = textileNumber,637 name = textileName,638 paramValue = textileName.Replace(' ', '-'),639 displayFields = displayFields640 });641 }642 }643644 int loopCounter = 0;645646 <label>647 <input name="variant-color" type="radio" data-title="@textileName" data-fabric="@textileNumber" class="js-variant-color" value="variant-@productionProduct.Id"><span class="border select-option" style="background-image: url(@textileImage)"></span>648 <div class="desc-wrapper">649 <div class="desc-content">650 <h4>@textileName</h4>651 <p>652 @foreach ( dynamic displayField in displayFields )653 {654 if ( displayField.type != "Filemanager" && displayField.type != "Link" )655 {656 if ( loopCounter > 0 )657 {658 <span> / </span>659 }660 @displayField.label<span>: </span> @displayField.value661 loopCounter++;662 }663 }664 </p>665 </div>666 </div>667 </label>668 }669 }670671672673 @{674 var currentUser = PageView.Current().User;675 bool isUserAuthenticated = currentUser != null;676 bool isIOSDevice = Dynamicweb.Frontend.Devices.DeviceInfo.ParseFromUserAgentString( HttpContext.Current.Request.UserAgent ).PlatformType.ToString().ToLower() == "ios";677 bool isModeRetail = UserContext.Current.ShowRetailPrice;678 bool showPriceArea = isModeRetail;679680 string tagline = Espresso.Area.Item.Tagline;681682 Dictionary< string, string > groups = new Dictionary< string, string >();683684 if ( isUserAuthenticated )685 {686 foreach ( Dynamicweb.Security.UserManagement.Group group in PageView.Current().User.Groups )687 {688 groups.Add( group.Name, group.ID.ToString() );689 }690691 if ( groups.ContainsKey( "DM only" ) )692 {693 isUserAuthenticated = false;694 }695 if ( groups.ContainsKey( "D" ) )696 {697 isUserAuthenticated = false;698 }699 if ( groups.ContainsKey( "C" ) )700 {701 isUserAuthenticated = false;702 showPriceArea = true;703 }704 if ( groups.ContainsKey( "B" ) )705 {706 isUserAuthenticated = true;707 showPriceArea = true;708 }709 if ( groups.ContainsKey( "A" ) )710 {711 isUserAuthenticated = true;712 showPriceArea = true;713 }714 }715716 // GroupID's excluded to be used in another template.717 List< string > specificationDisplayGroupIds = new List< string >();718 specificationDisplayGroupIds.Add( "12" ); // General products719 specificationDisplayGroupIds.Add( "5" ); // Specifications720 specificationDisplayGroupIds.Add( "14" ); // Measurements721 //specificationDisplayGroupIds.Add("6"); // Matress / Comfort722 specificationDisplayGroupIds.Add( "7" ); // Fabric723 specificationDisplayGroupIds.Add( "8" ); // The Designers724 specificationDisplayGroupIds.Add( "9" ); // Care guide725 specificationDisplayGroupIds.Add( "10" ); // Assembly guide726 specificationDisplayGroupIds.Add( "11" ); // Download727 List< LoopItem > specificationDisplayGroupList = new List< LoopItem >();728729 Dictionary< string, LoopItem > fieldDisplayGroups = new Dictionary< string, LoopItem >();730 foreach ( LoopItem fieldDisplayGroup in GetLoop( "FieldDisplayGroups" ) )731 {732 fieldDisplayGroups[ fieldDisplayGroup.GetString( "Ecom:FieldDisplayGroup.SystemName" ) ] = fieldDisplayGroup;733 if ( fieldDisplayGroup.GetLoop( "Fields" ).Count > 0 )734 {735 if ( specificationDisplayGroupIds.Contains( fieldDisplayGroup.GetString( "Ecom:FieldDisplayGroup.ID" ) ) )736 {737 specificationDisplayGroupList.Add( fieldDisplayGroup );738 }739 }740 }741742 List< string > sliderImages = new List< string >();743 if (GetLoop( "FieldDisplayGroups" )?.FirstOrDefault( fdg => fdg.GetInteger( "Ecom:FieldDisplayGroup.ID" ) == 21 ) != null )744 {745 sliderImages = GetLoop( "FieldDisplayGroups" )?.FirstOrDefault( fdg => fdg.GetInteger( "Ecom:FieldDisplayGroup.ID" ) == 21 )?.GetLoop( "Fields" ).Where( f => !string.IsNullOrEmpty( f.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) ).Select( fv => string.Format( "/files/images/{0}", fv.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) ).ToList();746 }747 bool hasSliderImages = sliderImages.Any();748749 Dictionary< string, dynamic > jsonFabrics = new Dictionary< string, dynamic >();750751 dynamic JSON = new752 {753 productid = GetValue( "Ecom:Product.ID" ),754 variantoptions = new List< dynamic >(),755 variantcombinations = new List< dynamic >()756 };757758 @* Global Image modal variable used in part image carousel *@759 string carouselClassList = "";760 bool showImageCarouselNavigation = GetLoop( "Details" ).Any();761 {762 //carouselClassList = "d-none";763 }764765 string vimeoPrimary = GetString( "Ecom:Product:Field.Video.Value" );766 string vimeoImage = GetString( "Ecom:Product:Field.VideoImage.Value.Clean" );767768 @* Global Image modal variable used in image carousel horizontal and vertical *@769 string isActive = string.Empty;770 string baseSKU = GetString( "Ecom:Product:Field.BaseSKU.Value" );771 string id = GetString( "Ecom:Product.ID" );772 string legFinish = GetString( "Ecom:Product:Field.FeatureGroup1.Value" );773 string fallbackImage = string.IsNullOrEmpty( GetString( "Ecom:Product.ImageDefault.Clean" ) ) == false ? string.Format( "//{0}{1}", GetGlobalValue( "Global:Area.Primarydomain" ), ImageService.Instance.GetImageURL( GetString( "Ecom:Product.ImageDefault.Clean" ), 1800, 1800, 5 ) ) : string.Empty;774 string primaryImage = fallbackImage;775776777 string overviewIllustration = GetString( "Ecom:Product.CategoryField.FinalProduct.MeasurementIcon.Value.Clean" );778779 string positions = string.IsNullOrEmpty( GetString( "Ecom:Product:Field.Positions.Value" ) ) == false ? GetString( "Ecom:Product:Field.Positions.Value" ) : "1";780 string[] positionArray = positions.Split( ',' );781 string position = positionArray[ 0 ];782 string fabric = GetString( "DefaultTextile" );783 bool includePIMPacks = GetString( "Ecom:Product.CategoryField.FinalProduct.IncludePIMPacks.Value.Clean" ) == "True";784785 string fabricOverviewRed = Espresso.Area.Item.DetailedFabricOverview;786 string fabricOverviewBlack = Espresso.Area.Item.DetailedFabricOverviewBlack;787788 string ARfile = string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.FinalProduct.AR.Value.Clean" ) ) ? string.Empty : GetString( "Ecom:Product.CategoryField.FinalProduct.AR.Value.Clean" );789790 string videoSrc = string.Empty;791 string videoThumb = string.Empty;792 string videoProvider = string.Empty;793 if ( !string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideo.Value.Clean" ) ) )794 {795 videoSrc = GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideo.Value.Clean" );796 if ( !string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideoStill.Value.Clean" ) ) )797 {798 videoThumb = string.Format( "//{0}{1}", GetGlobalValue( "Global:Area.Primarydomain" ), ImageService.Instance.GetImageURL( GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideoStill.Value.Clean" ), 200, 200, 5 ) );799 }800801 videoProvider = "direct";802803 if ( videoSrc.IndexOf( "vimeo" ) > -1 )804 {805 videoProvider = "vimeo";806 }807808 if ( videoSrc.IndexOf( "youtube" ) > -1 )809 {810 videoProvider = "youtube";811 }812 }813814 string video2Src = string.Empty;815 string video2Thumb = string.Empty;816 string video2Provider = string.Empty;817 if ( !string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideo2.Value.Clean" ) ) )818 {819 video2Src = GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideo2.Value.Clean" );820821 if ( !string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideoStillImage2.Value.Clean" ) ) )822 {823 video2Thumb = string.Format( "//{0}{1}", GetGlobalValue( "Global:Area.Primarydomain" ), ImageService.Instance.GetImageURL( GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideoStillImage2.Value.Clean" ), 200, 200, 5 ) );824 }825826 video2Provider = "direct";827828 if ( video2Src.IndexOf( "vimeo" ) > -1 )829 {830 video2Provider = "vimeo";831 }832833 if ( video2Src.IndexOf( "youtube" ) > -1 )834 {835 video2Provider = "youtube";836 }837 }838839 Dynamicweb.Ecommerce.Products.ProductService dwProductService = new Dynamicweb.Ecommerce.Products.ProductService();840 //Product product = dwProductService.GetProductById(GetString("Ecom:Product.ID"), GetString("Ecom:Product.VariantID"), true);841 Product product = dwProductService.GetProductById( GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ), Dynamicweb.Ecommerce.Common.Context.LanguageID, false );842 ProductDeliveryInfo productDeliveryInfo = Co3.IL.Dw.Services.ProductService.Instance.GetProductDeliveryInfo( product );843844 List< Product > production = new List< Product >();845 List< Product > inStock = new List< Product >();846 List< Product > blackTextiles = new List< Product >();847 List< Product > redTextiles = new List< Product >();848849 if ( productDeliveryInfo != null )850 {851 production = productDeliveryInfo.Production.Any() ? productDeliveryInfo.Production : null;852 inStock = productDeliveryInfo.InStock.Any() ? productDeliveryInfo.InStock : null;853 blackTextiles = productDeliveryInfo.BlackTextiles.Any() ? productDeliveryInfo.BlackTextiles : null;854 redTextiles = productDeliveryInfo.RedTextiles.Any() ? productDeliveryInfo.RedTextiles : null;855856 if ( production != null )857 {858 production = production.Where( p => p.Active ).ToList();859 }860861 if ( inStock != null )862 {863 inStock = inStock.Where( p => p.Active ).ToList();864 }865866 if ( blackTextiles != null )867 {868 blackTextiles = blackTextiles.Where( p => p.Active ).ToList();869 }870871 if ( redTextiles != null )872 {873 redTextiles = redTextiles.Where( p => p.Active ).ToList();874 }875 }876877 bool isBlackTextile = false;878 if ( blackTextiles != null && blackTextiles.Any() )879 {880 isBlackTextile = true;881 }882 else883 {884 isBlackTextile = GetString( "Ecom:Product:Field.PIMGroup.Value" ) == "95B";885 }886887 string fabricOverview = isBlackTextile ? fabricOverviewBlack : fabricOverviewRed;888 string bomProduct = string.Empty;889 string eComProductCanonical = string.Empty;890 string globalValueUrl = GetGlobalValue( "Global:Pageview.Url" );891 if ( GetGlobalValue( "Global:Pageview.Url" ).IndexOf( "?" ) > -1 )892 {893 globalValueUrl = GetGlobalValue( "Global:Pageview.Url" ).Substring( 0, GetGlobalValue( "Global:Pageview.Url" ).IndexOf( "?" ) );894 eComProductCanonical = String.Format( "{0}", globalValueUrl );895 Pageview.Meta.AddTag( "customCan", string.Format( "<link rel=\"canonical\" href=\"{0}\" />", eComProductCanonical ) );896 }897898 bool hasTopVideo = false;899 }900901 @sectionEnd()902903 @if ( hasSliderImages )904 {905 <section class="mb-3" style="margin-top: -1em;">906 <div class="carousel slide il-product-image-carousel-landscape" data-ride="carousel" data-interval="2500" id="js-e-product-sliderimage-carousel-landscape">907 <div class="border e-product-image-wrapper format-landscape">908 <div class="carousel-inner">909 @foreach ( ElementWithIndex< string > sliderImage in sliderImages.WithIndex() )910 {911 string imageContainerCssClass = sliderImage.Index == 0 ? "active" : string.Empty;912 <div style="background: url('/admin/public/getimage.ashx?Crop=0&Image=@sliderImage.Element&Format=webp&Width=2000&Height=&Quality=90'); background-size:cover; background-position: center;" class="carousel-item @imageContainerCssClass">913 </div>914 }915916 <a class="carousel-control-prev d-flex" data-slide="prev" data-target="#js-e-product-sliderimage-carousel-landscape"></a>917 <a class="carousel-control-next d-flex" data-slide="next" data-target="#js-e-product-sliderimage-carousel-landscape"></a>918919 </div>920 <ol class="carousel-indicators custom-thumbs-none d-flex">921 @foreach ( ElementWithIndex< string > sliderImage in sliderImages.WithIndex() )922 {923 string imageBullitCssClass = sliderImage.Index == 0 ? "active" : string.Empty;924 <li class="@imageBullitCssClass" data-target="#js-e-product-image-carousel-landscape" data-slide-to="@( sliderImage.Index )">925 <span style="background-image: url('/admin/public/getimage.ashx?Crop=0&Image=@sliderImage.Element&Format=jpg&Width=50&Height=&Quality=75')"></span>926 </li>927 }928 </ol>929 </div>930 </div>931 </section>932 }else if ( !string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.FinalProduct.Product_Sales_Video_Thumb.Value" ) ) )933 {934 hasTopVideo = true;935 string videoUrl = GetString( "Ecom:Product.CategoryField.FinalProduct.Product_Sales_Video_Thumb.Value" );936 string[] videoUrlParts = videoUrl.Split( new string[] { "com/" }, StringSplitOptions.None );937 <section class="mb-5" style="margin-top: -1em;">938 <div class="js-il-video-observer-element cookieconsent-optin-preferences cookieconsent-optin-statistics" style="position: relative; z-index: 1; width: 100%;">939 <div style="width: 100%; height: 56vw; position: relative; display: block; background: #fff;">940 <iframe data-cookieconsent="preferences,statistics" type="text/html" width="100%" height="100%" frameborder="0" allowfullscreen data-cookieblock-src="//player.vimeo.com/video/@videoUrlParts[ 1 ]?autoplay=1&loop=1&autopause=1&api=1&controls=1&muted=1&playsinline=1"></iframe>941942 </div>943 </div>944 <div class="cookieconsent-optout-preferences cookieconsent-optout-statistics">945 <div class="m-6 p-6 text-center h2">946 <a href="javascript:Cookiebot.renew()">@Translate( "eCom Product - Allow cookies - Video", "Please click here and 'Allow all cookies' in the pop-up box below to watch this video" )</a>947 </div>948 </div>949 </section>950 }951952 <div class="e-product js-e-product js-product-cylindo">953 @sectionStart( sectionClasses: "e-section pb-0" )954 <div class="col-12">955 <div class="row">956 <div class="col-12">957958 @if ( isBlackTextile )959 {960 <img src="/Files/Templates/Designs/innovationliving/_assets/img/black-label-logo.svg" class="mb-2" style="max-width: 22em;"/>961 }962963 <h4 class="mb-1 mt-0 text-muted">@GetString( "Ecom:Product.CategoryField.FinalProduct.ProductType.OptionLabel" )</h4>964 <h1 class="e-product-name mt-0 position-relative">965 @ProductService.Instance.GetName( GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ) )966 </h1>967 @if ( GetString( "Ecom:Product.CategoryField.FinalProduct.ProductName2.Value.Clean" ) != "" )968 {969 <h2 class="mt-0 mb-0">@GetString( "Ecom:Product.CategoryField.FinalProduct.ProductName2.Value.Clean" )</h2>970 }971 <p class="col-12 col-md-9 il-enlarged-text px-0">@GetString( "Ecom:Product.CategoryField.FinalProduct.TeaserDescription.Value" ).StripHtml().</p>972 <span class="text-muted">Design by @GetString( "DesignByInText.Clean" )</span>973 <p>974 <strong class="d-block mt-2 mb-0">975 <a class="arrow-right js-scroll-to-description" href="#attributes-group-5" data-target="#collapse-attributes-5">@Translate( "eCom Product - Description - Link", "View product description" )</a>976 </strong>977 </p>978 <hr class="my-4"/>979 </div>980 </div>981 </div>982 @sectionEnd()983984985 @sectionStart( sectionClasses: "e-section pb-0" )986 <div class="col-12">987 <h2>@Translate("eCom Product - Cylindo headline - Heading", "See the sofa from all angles in your favourite fabric")</h2>988 <div class="row">989 <div class="col-12 col-lg-6">990991 @if ( ( inStock != null || production != null || blackTextiles != null || redTextiles != null ) && productDeliveryInfo != null )992 {993 <div>994 <h4 class="mr-6 text-muted">995 @Translate( "eCom Product - Choosefabric - Heading", "Choose fabric" )996 <span class="disclaimer-button">997 <a data-target="#disclaimerModal" data-toggle="modal" href="/">?</a>998 </span>999 <a href="#">1000 <span class="chosen-variant">&nbsp;</span>1001 </a>1002 </h4>1003 </div>10041005 <div id="multicollapse-textiles" class="mt-2 collapse multi-collapse il-custom-product-details-collapse show">1006 <div class="il-custom-fabric-selector variant-color">10071008 @if ( productDeliveryInfo != null )1009 {1010 if ( inStock != null )1011 {1012 string deliveryTimeOnStock = GetString( "Ecom:Product.CategoryField.FinalProduct.DeliveryTimeDaysOnStock.OptionLabel" );1013 string countryCode2 = Context.Language.Code2;1014 string[] useDeliveryTimeWeeksCountries = { "GB", "DK", "DE", "US" };1015 if ( useDeliveryTimeWeeksCountries.Any( countryCode2.Contains ) )1016 {1017 deliveryTimeOnStock = GetString( "Ecom:Product.CategoryField.FinalProduct.DeliveryTimeWeeksOnStock.OptionLabel" );1018 }10191020 <p class="mr-1 m-0 pb-0 text-muted mb-half">1021 <strong class="float-left">@Translate( "eCom Product - inStockText - Text", "In stock / short delivery time /" )</strong> &nbsp;@string.Format( "({0})", deliveryTimeOnStock )1022 <span class="delivery-button">1023 <a data-target="#deliveryStandardModal" data-toggle="modal" href="/">?</a>1024 </span>1025 </p>1026 <div class="il-custom-fabric-selector-wrap">1027 @getProductionStockAndProduction( inStock, productCategory, jsonFabrics, GetLoop( "FieldDisplayGroups" ) )1028 </div>1029 }10301031 if ( production != null )1032 {1033 <p class="mr-1 m-0 pb-0 pt-1 text-muted mb-half">1034 <strong class="float-left">@Translate( "eCom Product - outOfStockText - Text", "DIY / Longer delivery time /" )</strong> &nbsp;@string.Format( "({0})", GetString( "Ecom:Product.CategoryField.FinalProduct.DeliveryTimeWeeksNotOnStock.OptionLabel" ) )1035 <span class="delivery-button">1036 <a data-target="#deliveryMadeToOrderModal" data-toggle="modal" href="/">?</a>1037 </span>1038 </p>1039 <div class="il-custom-fabric-selector-wrap">1040 @getProductionStockAndProduction( production, productCategory, jsonFabrics, GetLoop( "FieldDisplayGroups" ) )1041 </div>1042 }10431044 if ( blackTextiles != null )1045 {1046 <p class="mr-1 m-0 pb-0 pt-1 text-muted mb-half">1047 <strong class="float-left">@Translate( "eCom Product - BLACK textiles - Text", "BLACK textiles" )</strong> &nbsp;@string.Format( "({0})", GetString( "Ecom:Product.CategoryField.FinalProduct.DeliveryTimeWeeksOnStock.OptionLabel" ) )1048 <span class="delivery-button">1049 <a data-target="#deliveryBlackModal" data-toggle="modal" href="/">?</a>1050 </span>1051 </p>1052 <div class="il-custom-fabric-selector-wrap">1053 @getProductionStockAndProduction( blackTextiles, productCategory, jsonFabrics, GetLoop( "FieldDisplayGroups" ) )1054 </div>1055 }10561057 if ( redTextiles != null )1058 {1059 <p class="mr-1 m-0 pb-0 pt-1 text-muted mb-half">1060 <strong class="float-left">@Translate( "eCom Product - RED textiles - Text", "RED textiles" )</strong> &nbsp;@string.Format( "({0})", GetString( "Ecom:Product.CategoryField.FinalProduct.DeliveryTimeWeeksNotOnStock.OptionLabel" ) )1061 <span class="delivery-button">1062 <a data-target="#deliveryRedModal" data-toggle="modal" href="/">?</a>1063 </span>1064 </p>1065 <div class="il-custom-fabric-selector-wrap">1066 @getProductionStockAndProduction( redTextiles, productCategory, jsonFabrics, GetLoop( "FieldDisplayGroups" ) )1067 </div>1068 }106910701071 <p>1072 <strong class="d-block mr-1 m-0 mt-2 mb-3">1073 <a href="@fabricOverview" class="arrow-right">@Translate( "eCom Product - DetailedOverview - Link", "Go to detailed fabric overview" )</a>1074 <span class="d-block font-weight-normal pt-1 px-0 text-muted">@Translate( "eCom Product - Color disclamer - Text", "We can't guarantee that the colour on your screen accurately portray the true fabric colour." )</span>1075 </strong>1076 </p>1077 }1078 <script data-cookieconsent="ignore">10791080 var jsonFabrics = @JsonService.Instance.ToJson( jsonFabrics );1081 </script>1082 </div>1083 </div>1084 }1085 <hr/>10861087 <div class="alert alert-dark js-il-no-buy-container d-none">1088 Det er desværre ikke muligt at købe dette produkt1089 </div>10901091 <div class="js-il-price-buy-container d-none">10921093 <div class="js-il-product-detail-delivery-price-container row">1094 <script id="js-e-handlebars-tmpl-il-product-detail-delivery-price-container" type="text/x-handlebars-template">1095 <div class="col-sm-6 order-2">1096 {{#if showPriceArea}}1097 {{#if isModeRetail}}1098 <div class="e-product-price h2 mb-1 mt-0">1099 {{{retailPriceFormatted}}}1100 </div>1101 {{else}}1102 {{#if isUserAuthenticated}}1103 <div class="e-product-price h2 mb-0 mt-0">1104 {{{retailPriceFormatted}}}1105 </div>1106 {{#unless hideResellerPrice}}1107 {{{resellerPriceFormatted}}}1108 {{/unless}}1109 {{/if}}1110 {{/if}}1111 </div>1112 <div class="col-sm-6 order-sm-3">1113 {{{stockDeliveryFormatted}}}1114 </div>1115 {{/if}}1116 </script>1117 </div>11181119 @if ( isUserAuthenticated )1120 {1121 <form action="/system/data/cart" class="e-product-form js-e-product-form js-e-product-form-addtocart py-1" method="post">1122 <input name="CartCmd" type="hidden" value="Add">1123 <input name="ProductID" type="hidden" value="@GetString( "Ecom:Product.ID" )">1124 <input name="VariantID" type="hidden" value="">1125 <input name="EcomOrderLineFieldInput_TextileID" type="hidden" value="">1126 <input name="EcomOrderLineFieldInput_DeliveryWeek" type="hidden" value="">1127 <input name="Quantity" type="hidden" value="1">1128 <input name="Redirect" type="hidden" value="">1129 <input name="OrderContext" type="hidden" value="Shopping">1130 <input name="Name" type="hidden" value="@ProductService.Instance.GetName( GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ) )">1131 <input name="Number" type="hidden" value="@GetString( "Ecom:Product.Number" )">1132 <input name="Price" type="hidden" value="@ProductService.Instance.GetPrice( GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ) ).Price.ToJavaScript()">1133 <input name="CurrencyCode" type="hidden" value="@Dynamicweb.Ecommerce.Common.Context.Currency.Code">1134 <button class="btn btn-success" type="submit">@Translate( "eCom Product - Add To Cart - Button", "Add to cart" )</button>1135 </form>11361137 }1138 </div>11391140 @if ( !isUserAuthenticated || true )1141 {1142 <div class="col-12 mb-1 pt-1">1143 <div class="row">114411451146 <div class="col-12 p-0 small">1147 @if ( string.IsNullOrEmpty(Espresso.Area.Item.ProductPageFormular) == false )1148 {1149 <a data-toggle="collapse" data-target="#multicollapse-email-form" aria-expanded="false" aria-controls="multicollapse-email-form" class="h4 p-0 d-inline float-right mb-0 mt-0" style="text-decoration: none"><i class="material-icons mr-1">email</i>@Translate( "eCom Product - Send as email - Text", "Send as e-mail" )</a>1150 // Input values used in the ProductPageFormular by JS, rendered from the chosen form in Website Settings1151 <input type="hidden" name="ProductName" value="@product.Name">1152 <input type="hidden" name="ProductNumber" value="@product.Number">11531154 }1155 @if ( string.IsNullOrEmpty( Espresso.Area.Item.DealersPage ) == false && currentUser == null && Co3.IL.Dw.Models.Frontend.User.UserContext.Current.ShowRetailPrice == false)1156 {1157 //do not display dealer link if user is logged in, or if "in store mode" is true1158 string dealerLink = Espresso.Area.Item.DealersPage;1159 if ( isBlackTextile )1160 {1161 dealerLink += "&type=Black";1162 }1163 <p><a class="h4 p-0 d-inline float-right mb-0 mt-0 mr-3" href="@dealerLink" style="text-decoration: none"><i class="material-icons mr-1">language</i>Find dealer</a></p>1164 }1165 </div>116611671168 </div>1169 </div>11701171 <div id="multicollapse-email-form" class="collapse multi-collapse bg-light border js-il-product-page-email-form">1172 <div class="p-2 p-lg-4">1173 @RenderParagraphContent(int.Parse(Espresso.Area.Item.ProductPageFormular))1174 </div>1175 </div>11761177 }1178 </div>11791180 <div class="col-12 col-lg-6 order-first">1181 @using Dynamicweb.Core11821183 @*data-video-src="@videoSrc" data-video-thumb="@videoThumb" data-video-provider="@videoProvider" data-video2-src="@video2Src" data-video2-thumb="@video2Thumb" data-video2-provider="@video2Provider"*@11841185 <div class="js-cylindo-viewer-container collapse-product-images">1186 <div class="js-cylindo-viewer cylindo-viewer border" id="cylindo_viewer_detail_@id" data-sku="@baseSKU" data-number="@GetString("Ecom:Product.Number")" data-use-pim-packs="@includePIMPacks" data-leg-finish="@legFinish" data-position="@position" data-fabric="@fabric" data-fallback-image="@fallbackImage" data-video-src="" data-video-thumb="" data-video-provider="" data-video2-src="" data-video2-thumb="" data-video2-provider=""></div>1187 @foreach ( var pos in positionArray )1188 {1189 <div class="js-cylindo-thumbs cylindo-thumbs border" data-position="@pos.ToString()"></div>1190 }1191 @*if ( !string.IsNullOrEmpty( videoProvider ) )1192 {1193 <div class="js-cylindo-thumbs js-cylindo-thumb-video cylindo-thumbs cylindo-viewer-video border" style="background-image: url('@videoThumb');" data-position="video"></div>1194 }1195 @if ( !string.IsNullOrEmpty( video2Provider ) )1196 {1197 <div class="js-cylindo-thumbs js-cylindo-thumb-video cylindo-thumbs cylindo-viewer-video border" style="background-image: url('@video2Thumb');" data-position="video"></div>1198 }*@1199 @if ( !string.IsNullOrEmpty( ARfile ) && isIOSDevice )1200 {1201 <a href="" data-link="@ARfile" target="_blank" class="cylindo-thumbs innovation-ar-icon js-href-replace border" data-position="AR"></a>1202 }1203 </div>12041205 <div class="e-product-image-container js-e-product-image-container collapse-product-images">1206 <div class="carousel slide" data-interval="false" data-ride="carousel" id="js-e-product-image-carousel">1207 <div class="e-product-image-wrapper border">1208 <div class="carousel-inner">1209 @{1210 string carouselImage = string.IsNullOrEmpty( GetString( "Ecom:Product.ImageDefault.Default.Clean" ) ) == false ? string.Format( "//{0}{1}", GetGlobalValue( "Global:Area.Primarydomain" ), ImageService.Instance.GetImageURL( GetString( "Ecom:Product.ImageDefault.Default.Clean" ), 1800, 1800, 5 ) ) : string.Empty;1211 int currentIndex = 0;1212 }121312141215 <div class="carousel-item js-il-carousel-item active" data-image="@carouselImage" data-target="#js-e-product-image-modal" data-toggle="modal">1216 <img src="/admin/public/getimage.ashx?Crop=0&Image=@GetString( "Ecom:Product.ImageDefault.Default.Clean" )&Format=jpg&Width=600&Height=&Quality=90" alt="" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0">1217 </div>12181219 @foreach ( LoopItem imageCategory in GetLoop( "ImageCategories" ) )1220 {1221 if ( imageCategory.GetString( "Category.SystemName" ) == "PIMPackshots" )1222 {1223 foreach ( ElementWithIndex< LoopItem > image in imageCategory.GetLoop( "Category.Images" ).WithIndex() )1224 {1225 int imageIndex = image.Index + 1;1226 currentIndex = imageIndex;1227 string cssClassActive = imageIndex == 0 ? "active" : string.Empty;1228 carouselImage = string.IsNullOrEmpty( image.Element.GetString( "Ecom:Product:Detail.Image.Clean" ) ) == false ? string.Format( "//{0}{1}", GetGlobalValue( "Global:Area.Primarydomain" ), ImageService.Instance.GetImageURL( image.Element.GetString( "Ecom:Product:Detail.Image.Clean" ), 1800, 1800, 5 ) ) : string.Empty;12291230 <div class="carousel-item js-il-carousel-item @cssClassActive" data-image="@carouselImage" data-target="#js-e-product-image-modal" data-toggle="modal">1231 <img src="/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=600&Height=&Quality=90" alt="" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="@imageIndex">1232 </div>1233 }1234 }1235 }12361237 @if ( videoProvider == "vimeo" )1238 {1239 string[] videoSrcArray = videoSrc.Split( '/' );1240 string vimeoVideoId = videoSrcArray[ (videoSrcArray.Length-1) ];1241 <div class="carousel-item" data-target="#js-e-product-image-modal" data-toggle="modal">1242 <iframe src="https://player.vimeo.com/video/@vimeoVideoId?api=1" id="carousel-vimeo-video" frameborder="0" class="il-custom-vimeo-iframe" allow="autoplay; fullscreen" allowfullscreen data-target="#js-e-product-image-modal-carousel" data-slide-to="@(currentIndex + 1)"></iframe>1243 </div>1244 }12451246 @if ( video2Provider == "vimeo" )1247 {1248 string[] video2SrcArray = video2Src.Split( '/' );1249 string vimeoVideo2Id = video2SrcArray[ (video2SrcArray.Length-1) ];1250 <div class="carousel-item" data-target="#js-e-product-image-modal" data-toggle="modal">1251 <iframe src="https://player.vimeo.com/video/@vimeoVideo2Id?api=1" id="carousel-vimeo-video2" frameborder="0" class="il-custom-vimeo-iframe" allow="autoplay; fullscreen" allowfullscreen data-target="#js-e-product-image-modal-carousel" data-slide-to="@(currentIndex + 1)"></iframe>1252 </div>1253 }12541255 <a class="carousel-control-prev @carouselClassList" data-slide="prev" data-target="#js-e-product-image-carousel"></a>1256 <a class="carousel-control-next @carouselClassList" data-slide="next" data-target="#js-e-product-image-carousel"></a>1257 </div>1258 </div>12591260 @{1261 currentIndex = 0;1262 }12631264 <ol class="carousel-indicators @carouselClassList">12651266 <li class="active" data-target="#js-e-product-image-carousel" data-slide-to="0">1267 <span style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@GetString( "Ecom:Product.ImageDefault.Default.Clean" )&Format=jpg&Width=100&Height=&Quality=75)"></span>1268 </li>1269 @foreach ( LoopItem imageCategory in GetLoop( "ImageCategories" ) )1270 {1271 if ( imageCategory.GetString( "Category.SystemName" ) == "PIMPackshots" )1272 {1273 foreach ( ElementWithIndex< LoopItem > image in imageCategory.GetLoop( "Category.Images" ).WithIndex() )1274 {1275 int imageIndex = image.Index + 1;1276 currentIndex = imageIndex;1277 string cssClassActive = imageIndex == 0 ? "active" : string.Empty;1278 <li class="@cssClassActive" data-target="#js-e-product-image-carousel" data-slide-to="@imageIndex">1279 <span style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=100&Height=&Quality=75)"></span>1280 </li>1281 }1282 }1283 }12841285 @if ( videoProvider == "vimeo" )1286 {1287 <li class="il-custom-vimeo-video-thumb" data-target="#js-e-product-image-carousel" data-slide-to="@(currentIndex+1)">1288 <span style="background-image: url(@videoThumb)"></span>1289 </li>1290 }1291 </ol>1292 </div>1293 </div>12941295 <div class="modal modal-fullscreen fade e-product-image-modal" id="js-e-product-image-modal" data-backdrop="false" data-keyboard="true">1296 <div class="modal-dialog">1297 <div class="modal-content">1298 <div class="modal-body">12991300 <button type="button" class="close" data-dismiss="modal">1301 <i class="material-icons">close</i>1302 </button>13031304 <div id="js-e-product-image-modal-carousel" class="carousel slide" data-keyboard="true" data-interval="false">1305 <div class="carousel-inner">1306 <div class="carousel-item active" style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@GetString( "Ecom:Product.ImageDefault.Default.Clean" )&Format=jpg&Width=&Height=1800&Quality=90)"></div>1307 @foreach ( LoopItem imageCategory in GetLoop( "ImageCategories" ) )1308 {1309 if ( imageCategory.GetString( "Category.SystemName" ) == "PIMPackshots" )1310 {1311 foreach ( ElementWithIndex< LoopItem > image in imageCategory.GetLoop( "Category.Images" ).WithIndex() )1312 {1313 int imageIndex = image.Index + 1;1314 string cssClassActive = imageIndex == 0 ? "active" : string.Empty;1315 <div class="carousel-item @cssClassActive" style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=&Height=1800&Quality=90)">1316 </div>1317 }1318 }1319 }1320 </div>13211322 <ol class="carousel-indicators @carouselClassList">1323 <li class="active" data-target="#js-e-product-image-modal-carousel" data-slide-to="0">1324 <span style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@GetString( "Ecom:Product.ImageDefault.Default.Clean" )&Format=jpg&Width=100&Height=&Quality=75)"></span>1325 </li>1326 @foreach ( LoopItem imageCategory in GetLoop( "ImageCategories" ) )1327 {1328 if ( imageCategory.GetString( "Category.SystemName" ) == "PIMPackshots" )1329 {1330 foreach ( ElementWithIndex< LoopItem > image in imageCategory.GetLoop( "Category.Images" ).WithIndex() )1331 {1332 int imageIndex = image.Index + 1;1333 string cssClassActive = imageIndex == 0 ? "active" : string.Empty;1334 <li class="@cssClassActive" data-target="#js-e-product-image-modal-carousel" data-slide-to="@imageIndex">1335 <span style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=100&Height=&Quality=75)"></span>1336 </li>1337 }1338 }1339 }1340 </ol>13411342 <a class="carousel-control-prev @carouselClassList" data-target="#js-e-product-image-modal-carousel" data-slide="prev"></a>1343 <a class="carousel-control-next @carouselClassList" data-target="#js-e-product-image-modal-carousel" data-slide="next"></a>13441345 </div>1346 </div>1347 </div>1348 </div>1349 </div>13501351 </div>13521353 </div>1354 </div>1355 @sectionEnd()1356135713581359 @sectionStart( sectionClasses: "e-section pb-0" )1360 <div class="col-12 pb-3">1361 <hr/>1362 @if ( !string.IsNullOrEmpty( videoProvider ) )1363 {1364 <h2>@Translate("eCom Product - How to operate - Heading", "How to operate")</h2>1365 }1366 <div class="row">13671368 @{1369 string keyFeaturesCssClasses = "col-12";1370 }13711372 @if ( !string.IsNullOrEmpty( videoProvider ) )1373 {1374 keyFeaturesCssClasses = "col-12 col-lg-6";1375 if ( videoProvider == "vimeo" )1376 {1377 <script src="https://player.vimeo.com/api/player.js"></script>1378 }13791380 if ( videoProvider == "youtube" )1381 {1382 <script src="https://www.youtube.com/iframe_api"></script>1383 }1384 <div class="col-12 col-lg-6 mb-3 mb-lg-0">1385 @if ( videoProvider == "vimeo" )1386 {1387 string vimeoVideoId = videoSrc.Split( '/' ).Last();1388 string vimeoPath = $"https://player.vimeo.com/video/{vimeoVideoId}";13891390 <div class="embed-responsive embed-responsive-16by9 js-il-video-observer-element">1391 <iframe class="js-innovation-video-iframe embed-responsive-item" src="@( vimeoPath )" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>1392 </div>1393 }13941395 @if ( videoProvider == "youtube" )1396 {1397 string youtubeVideoId = videoSrc.Split( '/' ).Last();1398 if ( youtubeVideoId.Contains( "?v=" ) )1399 {1400 youtubeVideoId = youtubeVideoId.Split( new string[] { "?v=" }, StringSplitOptions.None ).Last();1401 }1402 string youtubePath = $"https://www.youtube.com/embed/{youtubeVideoId}?rel=0&enablejsapi=1";1403 <div class="embed-responsive embed-responsive-16by9 js-il-video-observer-element">1404 <iframe class="js-innovation-video-iframe embed-responsive-item" src="@youtubePath" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>1405 </div>1406 }14071408 </div>1409 }1410 <div class="@keyFeaturesCssClasses">1411 @if ( fieldDisplayGroups.ContainsKey( "Key_Features" ) )1412 {14131414 <div class="row">1415 <div class="col-12">1416 <div class="il-custom-attributes-container il-full-width border-0 mt-1">1417 <div class="d-flex flex-column">1418 <h4 class="text-muted">1419 <img alt="" src="/Files/Templates/Designs/innovationliving/_assets/img/innovation_living_icon_keyfeatures.svg"/>@fieldDisplayGroups[ "Key_Features" ].GetString( "Ecom:FieldDisplayGroup.Name" )1420 </h4>1421 <table class="il-custom-attribute-data-table col-9">1422 @foreach ( LoopItem fieldItem in fieldDisplayGroups[ "Key_Features" ].GetLoop( "Fields" ) )1423 {1424 string optionLabel = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) );1425 if ( !string.IsNullOrEmpty( optionLabel ) )1426 {1427 optionLabel = Regex.Replace( optionLabel, ",", ", " );1428 <tr>1429 <td class="subject">@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" )</td>1430 <td>@optionLabel</td>1431 </tr>1432 }1433 }1434 </table>1435 </div>1436 </div>1437 </div>1438 </div>1439 }1440 </div>1441 </div>1442 </div>1443 @sectionEnd()14441445 @sectionStart( sectionClasses: "e-section pb-0" )14461447 <div class="col-12">14481449 @{1450 string comfortDescription = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, "ProductCategory|Upholstery|UpholsteryFoamCharacteristics" );14511452 <hr/>1453 <h2>@Translate("eCom Product - Comfort - Heading", "Comfort")</h2>1454 <div class="row">1455 <div class="col-12 col-lg-5 mb-3 mb-lg-0">1456 @comfortDescription1457 </div>14581459 <div class="col-12 col-lg-7">1460 @if ( fieldDisplayGroups.ContainsKey( "Comfort__Mattress" ) )1461 {1462 string comfortImage = GetString( "Ecom:Product.CategoryField.FinalProduct.RelComfortImage.Value.Clean" );1463 bool hasComfortImage = !string.IsNullOrEmpty( comfortImage );1464 string cssContentRow = hasComfortImage ? "col-12 col-md-7" : "col-12";14651466 <div class="row">1467 <div class="@cssContentRow order-2 order-md-1">1468 <table class="il-custom-attribute-data-table mb-4 COMFORT">1469 @foreach ( LoopItem fieldItem in fieldDisplayGroups[ "Comfort__Mattress" ].GetLoop( "Fields" ) )1470 {1471 string fieldDisplayGroupOptionLabelRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.OptionLabel" );1472 if ( string.IsNullOrEmpty( fieldDisplayGroupOptionLabelRaw ) )1473 {1474 fieldDisplayGroupOptionLabelRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );1475 }1476 string fieldDisplayGroupOptionLabelTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupOptionLabelRaw + " - Heading", fieldDisplayGroupOptionLabelRaw ), fieldDisplayGroupOptionLabelRaw );1477 string fieldDisplayGroupFieldNameRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );1478 string fieldDisplayGroupFieldNameTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupFieldNameRaw + " - Heading", fieldDisplayGroupFieldNameRaw ), fieldDisplayGroupFieldNameRaw );14791480 string fieldValue = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) );14811482 if ( !string.IsNullOrEmpty( fieldValue ) )1483 {1484 fieldValue = Regex.Replace( fieldValue, ",", ", " );1485 }14861487 if ( string.IsNullOrEmpty( fieldValue ) == false )1488 {1489 <tr>1490 <td class="subject">@fieldDisplayGroupFieldNameTranslated</td>1491 <td>1492 @if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Images" && fieldValue.Contains( ".jpg" ) || fieldValue.Contains( ".png" ) )1493 {1494 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldValue, 500, 0, 0 )"/>1495 }1496 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldValue.Contains( ".jpg" ) )1497 {1498 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldValue, 500, 0, 0 )"/>1499 }1500 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldValue.Contains( ".png" ) )1501 {1502 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldValue, 500, 0, 0 )"/>1503 }1504 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldValue.Contains( ".pdf" ) )1505 {1506 <a href="@fieldValue.Replace( "../", "/Files/" )">1507 @Translate( "eCom Product = Download PDF - Link", "Download pdf here" )1508 </a>1509 }1510 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Link" )1511 {1512 <a href="@fieldValue">1513 @Translate( "eCom Product - View more - Text", "View more" )1514 </a>1515 }1516 else1517 {1518 @fieldValue<br/>1519 }1520 </td>1521 </tr>1522 }1523 }1524 </table>1525 </div>1526 @if ( hasComfortImage )1527 {1528 <div class="col-8 col-md-5 mx-auto order-1 order-md-0">1529 <img src="@ImageService.Instance.GetImageURL( comfortImage, 400, 400, 1 )" alt="" class="p-img mb-2"/>1530 </div>1531 }1532 </div>1533 }1534 </div>1535 </div>1536 }1537 </div>1538 @sectionEnd()1539154015411542 @*Include( "inc/il-part-attributes.cshtml", "helpers.espresso" )*@1543 @*@if (vimeoPrimary !="" && vimeoImage !=""){15441545 <section class="e-section pr-0 pl-0 pb-2">15461547 <div onclick="play();" id="vidwrap" style="position: relative; width: 100%; height: 0; padding-bottom: 56.25%; background: url('@vimeoImage') no-repeat center; cursor: pointer;">1548 <script type="text/javascript">1549 function play(){1550 document.getElementById('vidwrap').innerHTML = '<iframe id="ytplayer" type="text/html" width="1440" height="810" style="position: absolute; width: 100%; height: 100%; left: 0; top: 0; background: #222;" src="//player.vimeo.com/video/@vimeoPrimary?api=1" frameborder="0" allowfullscreen></iframe>';1551 }1552 </script>1553 </div>15541555 </section>15561557 }*@155815591560 @if (vimeoPrimary !="" && vimeoImage !=""){1561 <section class="e-section pr-0 pl-0 pb-2">1562 <div id="vidwrap" class="js-il-video-observer-element" style="position: relative; width: 100%; height: 0; padding-bottom: 56.25%;">1563 <iframe id="ytplayer" type="text/html" width="1440" height="810" style="position: absolute; width: 100%; height: 100%; left: 0; top: 0; background: #222;" src="//player.vimeo.com/video/@vimeoPrimary?api=1&muted=1" frameborder="0" allowfullscreen></iframe>1564 </div>1565 </section>1566 }15671568 @using Dynamicweb.SystemTools15691570 @foreach ( LoopItem group in GetLoop("ProductRelatedGroups") )1571 {1572 if ( group.GetString( "Ecom:Product:RelatedGroup.GroupID" ) == "RELGRP5" )1573 {15741575 @ProductRelatedComfortProducts(1576 sectionClasses: "e-section bg-light py-3",1577 heading: @Translate("eCom ProductRelatedgroups - Comfort - Heading", "Comfort"),1578 introduction: @Translate("eCom ProductRelatedgroups - Comfort - Text", "This is the group description"),1579 productLoop: group.GetLoop("RelatedProducts").Take(3),1580 mainProduct: product1581 )1582 }1583 }15841585 @if ( !string.IsNullOrEmpty( @GetString( "Ecom:Product.CategoryField.FinalProduct.LegOptionsParagraphID.Value.Clean" ) ) )1586 {1587 @RenderParagraphContent( int.Parse( @GetString( "Ecom:Product.CategoryField.FinalProduct.LegOptionsParagraphID.Value.Clean" ) ) )1588 }15891590 @inherits Co3.Espresso.Website.TemplateBases.Pages.PageBase1591 @using Co3.Espresso.Base.Extensions1592 @using Co3.Espresso.Website.Services1593 @using Dynamicweb.Core1594 @sectionStart( sectionClasses: "e-section pb-3" )15951596 <div class="col-12">1597 <div class="row">1598 <div class="col-12">1599 <div class="accordion il-specification-accordion" id="accordionSpecifications">1600 @foreach ( LoopItem specificationGroupItem in specificationDisplayGroupList )1601 {1602 string groupName = specificationGroupItem.GetString( "Ecom:FieldDisplayGroup.Name" );1603 string groupID = specificationGroupItem.GetString( "Ecom:FieldDisplayGroup.ID" );1604 bool hasValues = false;16051606 foreach ( LoopItem fieldItem in specificationGroupItem.GetLoop( "Fields" ) )1607 {1608 if ( !string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) )1609 {1610 hasValues = true;1611 }1612 else1613 {1614 if ( !string.IsNullOrEmpty( Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) ) ) )1615 {1616 hasValues = true;1617 }1618 }1619 }1620 // specificationDisplayGroupList ID's is coming from the foreach in il-part-attributes.cshtml16211622 if ( groupID == "7" ) // Fabric1623 {1624 <div class="js-product-detail-fabric-container">1625 <script id="js-e-handlebars-tmpl-product-detail-fabric" type="text/x-handlebars-template">1626 {{#if displayFields}}1627 <div id="attributes-group-@groupID" style="margin-bottom: 1em;">1628 <button class="btn-block collapsed il-custom-accordion-button-stripped m-0 p-0 pb-3 pt-2 text-center togglebar" type="button" data-toggle="collapse" data-target="#collapse-attributes-@groupID" aria-expanded="false" aria-controls="collapse-attributes-@groupID">1629 <h4 class="mb-0">@groupName</h4>1630 </button>1631 </div>16321633 <div id="collapse-attributes-@groupID" class="collapse il-top-toggle" aria-labelledby="@groupName" data-parent="#accordionSpecifications">1634 <div class="row">1635 <div class="col-10">1636 <table class="il-custom-attribute-data-table mb-4">1637 {{#each displayFields}}1638 {{#compare type '!==' 'Filemanager'}}1639 <tr>1640 <td class="subject">{{label}}</td>1641 <td>1642 {{#compare type '===' 'Link'}}1643 <a href="{{value}}">Read More</a>1644 {{else}}1645 {{#compare type '===' 'Filemanager'}}1646 <img src="{{value}}" />1647 {{else}}1648 {{value}}1649 {{/compare}}1650 {{/compare}}1651 </td>1652 </tr>1653 {{/compare}}1654 {{/each}}1655 </table>1656 </div>1657 <div class="col-2">1658 <img class="w-100" src="{{{displayFields.[0].value}}}" />1659 </div>1660 </div>1661 </div>1662 {{/if}}1663 </script>1664 </div>1665 }166616671668 if ( hasValues == true || !string.IsNullOrEmpty( bomProduct ) )1669 {1670 if ( specificationGroupItem.GetLoop( "Fields" ).Count > 0 )1671 {1672 if ( groupID != "12" && groupID != "11" && groupID != "7" )1673 {1674 // General products & Downloads & fabrics16751676 <div id="attributes-group-@groupID" style="margin-bottom: 1em;">1677 <button class="btn-block collapsed il-custom-accordion-button-stripped m-0 p-0 pt-2 pb-3 text-center togglebar" type="button" data-toggle="collapse" data-target="#collapse-attributes-@groupID" aria-expanded="false" aria-controls="collapse-attributes-@groupID">1678 <h4 class="mb-0">@groupName</h4>1679 </button>1680 </div>16811682 <div id="collapse-attributes-@groupID" class="collapse il-top-toggle" aria-labelledby="@groupName" data-parent="#accordionSpecifications">16831684 @if ( groupID == "8" ) // The Designers1685 {1686 string designerImage = GetString( "DesignerImage" );1687 string designerImageURL = "/admin/public/getimage.ashx?Crop=0&Image=" + designerImage + "&Format=jpg&Quality=90&Width=400&Height=400";168816891690 <div class="container-fluid">1691 <div class="row">1692 <div class="col-8">1693 <h4 class="mb-0">1694 <strong>1695 <span class="text-muted">Design by @GetString( "DesignByInText.Clean" )</span>1696 </strong><br/><span class="small">@GetString( "DesignedIn.Clean" )</span>1697 </h4>1698 <p>@GetString( "DesignerDesc.Clean" )</p>1699 </div>1700 <div class="col-4">1701 <img class="p-img p-img-circle" src="@designerImageURL" alt="@GetString( "DesignByInText.Clean" )"/>1702 </div>1703 @if ( @GetString( "DesignerQuotes.Clean" ) != "" )1704 {1705 <div class="col-12 col-md-10 offset-md-1 d-block mt-3 mb-3 text-left">1706 <blockquote class="il-designer-quote text-muted">@GetString( "DesignerQuotes.Clean" )</blockquote>1707 </div>1708 }1709 else1710 {1711 <div class="mb-1">&nbsp;</div>1712 }1713 </div>1714 </div>1715 }17161717 else if ( groupID == "11" ) // Download1718 {1719 <table class="il-custom-attribute-data-table __3__">17201721 @foreach ( LoopItem fieldItem in specificationGroupItem.GetLoop( "Fields" ) )1722 {1723 if ( string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false )1724 {1725 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) == "DocumentName1" )1726 {1727 @:<tr>1728 <td>@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )</td>1729 }1730 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) == "DocumentFile1" )1731 {1732 <td>1733 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )" download>1734 @Translate( "eCom Product = Download General - Link", "Download" )1735 </a>1736 </td>1737 @:</tr>1738 }17391740 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) == "DocumentName2" )1741 {1742 @:<tr>1743 <td>@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )</td>1744 }1745 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) == "DocumentFile2" )1746 {1747 <td>1748 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )" download>1749 @Translate( "eCom Product = Download General - Link", "Download" )1750 </a>1751 </td>1752 @:</tr>1753 }17541755 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) == "DocumentName3" )1756 {1757 @:<tr>1758 <td>@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )</td>1759 }1760 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) == "DocumentFile3" )1761 {1762 <td>1763 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )" download>1764 @Translate( "eCom Product = Download General - Link", "Download" )1765 </a>1766 </td>1767 @:</tr>1768 }1769 }1770 }1771 </table>1772 }1773 else if ( groupID == "14" ) // Measurements1774 {1775 List< LoopItem > _displayGroups = GetLoop( "FieldDisplayGroups" );1776 LoopItem sofaDisplayGroup = _displayGroups.FirstOrDefault( dgl => dgl.GetString( "Ecom:FieldDisplayGroup.ID" ) == "3" );1777 LoopItem bedDisplayGroup = _displayGroups.FirstOrDefault( dgl => dgl.GetString( "Ecom:FieldDisplayGroup.ID" ) == "4" );17781779 <div class="row">1780 @if ( sofaDisplayGroup != null && sofaDisplayGroup.GetLoop( "Fields" ).Any() )1781 {1782 <div class="col-12 col-md-6 col-lg-3 mb-4 mb-md-0">1783 <h4 class="d-flex text-muted mb-2">1784 <img src="/Files/Templates/Designs/innovationliving/_assets/img/innovation_living_icon_sofa.svg" alt="" style="max-width: 4em; opacity: .5;">1785 <span class="align-self-center pl-1">@sofaDisplayGroup.GetString( "Ecom:FieldDisplayGroup.Name" )</span>1786 @RenderSnippet( "SofaDisclaimerButton" )1787 </h4>1788 <table class="il-custom-attribute-data-table">1789 @foreach ( LoopItem fieldItem in sofaDisplayGroup.GetLoop( "Fields" ) )1790 {1791 string optionLabel = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) );17921793 if ( !string.IsNullOrEmpty( optionLabel ) )1794 {1795 optionLabel = Regex.Replace( optionLabel, ",", ", " );1796 <tr>1797 <td class="subject">@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" )</td>1798 <td>@optionLabel</td>1799 </tr>1800 }1801 }1802 </table>1803 </div>1804 }18051806 @if ( bedDisplayGroup != null && bedDisplayGroup.GetLoop( "Fields" ).Any() )1807 {1808 <div class="col-12 col-md-6 col-lg-3 mb-4 mb-md-0">1809 <h4 class="d-flex text-muted mb-2">1810 <img src="/Files/Templates/Designs/innovationliving/_assets/img/innovation_living_icon_bed.svg" alt="" style="max-width: 4em; opacity: .5;">1811 <span class="align-self-center pl-1">@bedDisplayGroup.GetString( "Ecom:FieldDisplayGroup.Name" )</span>1812 @RenderSnippet( "bedDisclaimerButton" )1813 </h4>18141815 <table class="il-custom-attribute-data-table">1816 @foreach ( LoopItem fieldItem in bedDisplayGroup.GetLoop( "Fields" ) )1817 {1818 string optionLabel = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) );1819 if ( !string.IsNullOrEmpty( optionLabel ) )1820 {1821 optionLabel = Regex.Replace( optionLabel, ",", ", " );1822 <tr>1823 <td class="subject">@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" )</td>1824 <td>@optionLabel</td>1825 </tr>1826 }1827 }1828 </table>1829 </div>1830 }183118321833 <div class="col-12 col-lg-6 mt-4 mb-4 mt-lg-0 mb-lg-0">18341835 @if ( !string.IsNullOrEmpty( overviewIllustration ) )1836 {1837 <img src="@ImageService.Instance.GetImageURL( overviewIllustration, 1000, 0, 0 )" alt="" class="p-img w-100"/>1838 }1839 <div class="row"><div class="col-12 col-md-6">1840 <table class="il-custom-attribute-data-table mb-4">18411842 @*if ( !string.IsNullOrEmpty( overviewIllustration ) )1843 {1844 <tr>1845 <td colspan="2"><img src="@ImageService.Instance.GetImageURL( overviewIllustration, 500, 0, 0 )" alt="" class="p-img"/></td>1846 </tr>1847 }*@18481849 @foreach ( LoopItem fieldItem in specificationGroupItem.GetLoop( "Fields" ) )1850 {1851 string optionValue = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) );1852 string fieldDisplayGroupOptionLabelRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.OptionLabel" );1853 if ( string.IsNullOrEmpty( fieldDisplayGroupOptionLabelRaw ) )1854 {1855 fieldDisplayGroupOptionLabelRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );1856 }1857 string fieldDisplayGroupOptionLabelTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupOptionLabelRaw + " - Heading", fieldDisplayGroupOptionLabelRaw ), fieldDisplayGroupOptionLabelRaw );1858 string fieldDisplayGroupFieldNameRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );1859 string fieldDisplayGroupFieldNameTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupFieldNameRaw + " - Heading", fieldDisplayGroupFieldNameRaw ), fieldDisplayGroupFieldNameRaw );18601861 if ( string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false )1862 {1863 <tr>1864 <td class="subject">@fieldDisplayGroupFieldNameTranslated</td>1865 <td>1866 @if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Images" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".jpg" ) || fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".png" ) )1867 {1868 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>1869 }1870 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".jpg" ) )1871 {1872 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>1873 }1874 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".png" ) )1875 {1876 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>1877 }1878 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".pdf" ) )1879 {1880 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Replace( "../", "/Files/" )">1881 @Translate( "eCom Product = Download PDF - Link", "Download pdf here" )1882 </a>1883 }1884 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Link" )1885 {1886 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )">1887 @Translate( "eCom Product - View more - Text", "View more" )1888 </a>1889 }1890 else1891 {1892 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.IsList" ) == "True" )1893 {1894 @fieldDisplayGroupOptionLabelTranslated<br/>1895 }1896 else1897 {1898 @fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Replace( "<p>", string.Empty ).Replace( "</p>", string.Empty )1899 }1900 }1901 </td>1902 </tr>1903 }1904 else if ( !string.IsNullOrEmpty( optionValue ) )1905 {1906 <tr>1907 <td class="subject">@fieldDisplayGroupOptionLabelTranslated</td>1908 <td>@optionValue.Replace( "<p>", string.Empty ).Replace( "</p>", string.Empty )</td>1909 </tr>1910 }1911 }19121913 </table>1914 </div></div>19151916 </div>1917 </div>1918 }1919 @*else if ( groupID == "6" ) // Comfort / Mattress1920 {1921 string comfortImage = product.GetCategoryValue( "FinalProduct", "RelComfortImage" )?.ToString();1922 bool hasComfortImage = !string.IsNullOrEmpty( comfortImage );1923 string cssContentRow = hasComfortImage ? "col-8" : "col-12";19241925 <div class="row">1926 <div class="@cssContentRow">1927 <table class="il-custom-attribute-data-table mb-4 COMFORT">1928 @foreach ( LoopItem fieldItem in specificationGroupItem.GetLoop( "Fields" ) )1929 {1930 bomProduct = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) );1931 string fieldDisplayGroupOptionLabelRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.OptionLabel" );1932 if ( string.IsNullOrEmpty( fieldDisplayGroupOptionLabelRaw ) )1933 {1934 fieldDisplayGroupOptionLabelRaw = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Name");1935 }1936 string fieldDisplayGroupOptionLabelTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupOptionLabelRaw + " - Heading", fieldDisplayGroupOptionLabelRaw ), fieldDisplayGroupOptionLabelRaw );1937 string fieldDisplayGroupFieldNameRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );1938 string fieldDisplayGroupFieldNameTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupFieldNameRaw + " - Heading", fieldDisplayGroupFieldNameRaw ), fieldDisplayGroupFieldNameRaw );19391940 if ( string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false )1941 {1942 <tr>1943 <td class="subject">@fieldDisplayGroupFieldNameTranslated</td>1944 <td>1945 @if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Images" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".jpg" ) || fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".png" ) )1946 {1947 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>1948 }1949 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".jpg" ) )1950 {1951 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>1952 }1953 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".png" ) )1954 {1955 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>1956 }1957 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".pdf" ) )1958 {1959 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Replace( "../", "/Files/" )">1960 @Translate( "eCom Product = Download PDF - Link", "Download pdf here" )1961 </a>1962 }1963 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Link" )1964 {1965 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )">1966 @Translate( "eCom Product - View more - Text", "View more" )1967 </a>1968 }1969 else1970 {1971 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.IsList" ) == "True" )1972 {1973 @fieldDisplayGroupOptionLabelTranslated<br/>1974 }1975 else1976 {1977 @fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )<br/>1978 }1979 }1980 </td>1981 </tr>1982 }1983 else if ( !string.IsNullOrEmpty( bomProduct ) )1984 {1985 <tr>1986 <td class="subject">@fieldDisplayGroupOptionLabelTranslated</td>1987 <td>@bomProduct</td>1988 </tr>1989 }1990 }1991 </table>1992 </div>1993 @if ( hasComfortImage )1994 {1995 <div class="col-4">1996 <img src="@ImageService.Instance.GetImageURL("/Files/Images/" + comfortImage, 400, 400, 1)" alt="" class="p-img mb-2"/>1997 </div>1998 }1999 </div>2000 }*@2001 else2002 {2003 <table class="il-custom-attribute-data-table mb-4 __5__">2004 @foreach ( LoopItem fieldItem in specificationGroupItem.GetLoop( "Fields" ) )2005 {2006 string optionValue = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) );2007 string fieldDisplayGroupOptionLabelRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.OptionLabel" );2008 if ( string.IsNullOrEmpty( fieldDisplayGroupOptionLabelRaw ) )2009 {2010 fieldDisplayGroupOptionLabelRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );2011 }2012 string fieldDisplayGroupOptionLabelTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupOptionLabelRaw + " - Heading", fieldDisplayGroupOptionLabelRaw ), fieldDisplayGroupOptionLabelRaw );2013 string fieldDisplayGroupFieldNameRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );2014 string fieldDisplayGroupFieldNameTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupFieldNameRaw + " - Heading", fieldDisplayGroupFieldNameRaw ), fieldDisplayGroupFieldNameRaw );20152016 if ( string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false )2017 {2018 <tr>2019 <td class="subject">@fieldDisplayGroupFieldNameTranslated</td>2020 <td>2021 @if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Images" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".jpg" ) || fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".png" ) )2022 {2023 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>2024 }2025 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".jpg" ) )2026 {2027 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>2028 }2029 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".png" ) )2030 {2031 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>2032 }2033 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".pdf" ) )2034 {2035 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Replace( "../", "/Files/" )">2036 @Translate( "eCom Product = Download PDF - Link", "Download pdf here" )2037 </a>2038 }2039 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Link" )2040 {2041 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )">2042 @Translate( "eCom Product - View more - Text", "View more" )2043 </a>2044 }2045 else2046 {2047 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.IsList" ) == "True" )2048 {2049 @fieldDisplayGroupOptionLabelTranslated<br/>2050 }2051 else2052 {2053 @fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )<br/>2054 }2055 }2056 </td>2057 </tr>2058 }2059 else if ( !string.IsNullOrEmpty( optionValue ) )2060 {2061 <tr>2062 <td class="subject">@fieldDisplayGroupOptionLabelTranslated</td>2063 <td>@optionValue</td>2064 </tr>2065 }2066 }2067 </table>2068 }2069 </div>2070 }2071 }2072 }2073 }20742075 </div>20762077 </div>2078 </div>2079 </div>2080 @sectionEnd()208120822083 @if ( !hasTopVideo && !string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.FinalProduct.Product_Sales_Video_Thumb.Value" ) ) )2084 {2085 string videoUrl = GetString( "Ecom:Product.CategoryField.FinalProduct.Product_Sales_Video_Thumb.Value" );2086 string[] videoUrlParts = videoUrl.Split( new string[] { "com/" }, StringSplitOptions.None );2087 //<section class="mb-5" style="margin-top: -1em;">2088 @sectionStart(2089 sectionClasses: "e-section bg-light py-2",2090 contentClasses: "col-12 mx-auto" )20912092 <div class="col-12">20932094 @*js-il-video-observer-element*@2095 <div class="embed-responsive js-il-video-observer-element embed-responsive-16by9 cookieconsent-optin-preferences cookieconsent-optin-statistics">2096 <iframe class="js-innovation-video-iframe" data-cookieconsent="preferences,statistics" type="text/html" width="100%" height="100%" data-cookieblock-src="//player.vimeo.com/video/@videoUrlParts[ 1 ]" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>2097 </div>209820992100 @*<div class="js-il-video-observer-element cookieconsent-optin-preferences cookieconsent-optin-statistics" style="position: relative; z-index: 1; width: 100%;">2101 <div style="width: 100%; height: 56vw; position: relative; display: block; background: #fff;">2102 <iframe data-cookieconsent="preferences,statistics" type="text/html" width="100%" height="100%" frameborder="0" allowfullscreen data-cookieblock-src="//player.vimeo.com/video/@videoUrlParts[ 1 ]?autoplay=1&loop=1&autopause=1&api=1&controls=1&muted=1&playsinline=1"></iframe>21032104 </div>2105 </div>*@2106 <div class="cookieconsent-optout-preferences cookieconsent-optout-statistics">2107 <div class="m-6 p-6 text-center h2">2108 <a href="javascript:Cookiebot.renew()">@Translate( "eCom Product - Allow cookies - Video", "Please click here and 'Allow all cookies' in the pop-up box below to watch this video" )</a>2109 </div>2110 </div>2111 </div>2112 @sectionEnd()2113 }else if ( hasSliderImages && hasTopVideo )2114 {2115 @sectionStart(2116 sectionClasses: "e-section pb-1",2117 contentClasses: "col-12 col-md-10 mx-auto" )2118 <div class="col-12 d-block">2119 <div class="row">2120 <div class="col-12">2121 <div class="e-product-image-container">2122 <div class="carousel slide il-product-image-carousel-landscape" data-ride="carousel" id="js-e-product-image-carousel-landscape">2123 <div class="border e-product-image-wrapper format-landscape">2124 <div class="carousel-inner">21252126 @foreach ( ElementWithIndex< string > sliderImage in sliderImages.WithIndex() )2127 {2128 string imageContainerCssClass = sliderImage.Index == 0 ? "active" : string.Empty;2129 <div style="background: url('/admin/public/getimage.ashx?Crop=0&Image=@( sliderImage.Element )&Format=jpg&Width=1500&Height=&Quality=90'); background-size:cover" class="carousel-item @imageContainerCssClass" data-toggle="modal">2130 </div>2131 }21322133 <a class="carousel-control-prev d-flex" data-slide="prev" data-target="#js-e-product-image-carousel-landscape"></a>2134 <a class="carousel-control-next d-flex" data-slide="next" data-target="#js-e-product-image-carousel-landscape"></a>21352136 </div>2137 </div>2138 <ol class="carousel-indicators custom-thumbs-none d-flex">2139 @foreach ( ElementWithIndex< string > sliderImage in sliderImages.WithIndex() )2140 {2141 string imageContainerCssClass = sliderImage.Index == 0 ? "active" : string.Empty;2142 <li class="@imageContainerCssClass" data-target="#js-e-product-image-carousel-landscape" data-slide-to="@( sliderImage.Index )">2143 <span style="background-image: url('/admin/public/getimage.ashx?Crop=0&Image=@( sliderImage.Element )&Format=jpg&Width=50&Height=&Quality=75')"></span>2144 </li>2145 }2146 </ol>2147 </div>2148 </div>2149 </div>2150 </div>2151 </div>2152 @sectionEnd()2153 }21542155 @*if NO sliderImages*@2156 @{2157 string portraitCarouselClassList = "d-none";2158 string carouselPortraitContainer = "d-none";21592160 bool showPortraitCarousel = GetLoop( "ImageCategories" ).Any( cp => cp.GetString( "Category.SystemName" ) == "BannerPortrait" );21612162 if ( showPortraitCarousel == true )2163 {2164 carouselPortraitContainer = "d-block";2165 }2166 }21672168 @if ( !hasSliderImages )2169 {2170 @sectionStart(2171 sectionClasses: "e-section pb-1",2172 contentClasses: "col-12 col-md-8 mx-auto" )2173 <div class="col-12 col-md-8 offset-md-2 @carouselPortraitContainer">2174 <div class="row">2175 <div class="col-12">2176 <div class="e-product-image-container">2177 <div class="carousel slide il-product-image-carousel-portrait" data-ride="carousel" id="js-e-product-image-carousel-portrait">2178 <div class="border e-product-image-wrapper format-portrait">2179 <div class="carousel-inner">21802181 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) )2182 {2183 if ( imageCategories.GetString( "Category.SystemName" ) == "BannerPortrait" )2184 {2185 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() )2186 {2187 if ( image.Element.Index == 1 )2188 {2189 isActive = "active";2190 }2191 else2192 {2193 isActive = "";2194 }2195 if ( image.Index != 0 )2196 {2197 portraitCarouselClassList = "d-flex";2198 }2199 <div style="background: url('/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=1500&Height=&Quality=90'); background-size:cover" class="carousel-item @isActive" data-toggle="modal">2200 @*<img src="/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString("Ecom:Product:Detail.Image.Clean")&Format=jpg&Width=1500&Height=&Quality=90" alt="" class="e-product-image" data-slide-to="@(image.Index)">*@2201 </div>2202 }2203 }2204 }22052206 <a class="carousel-control-prev @portraitCarouselClassList" data-slide="prev" data-target="#js-e-product-image-carousel-portrait"></a>2207 <a class="carousel-control-next @portraitCarouselClassList" data-slide="next" data-target="#js-e-product-image-carousel-portrait"></a>22082209 </div>2210 </div>2211 <ol class="carousel-indicators custom-thumbs-none @portraitCarouselClassList">2212 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) )2213 {2214 if ( imageCategories.GetString( "Category.SystemName" ) == "BannerPortrait" )2215 {2216 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() )2217 {2218 if ( image.Element.Index == 1 )2219 {2220 isActive = "active";2221 }2222 else2223 {2224 isActive = "";2225 }2226 <li class="@isActive" data-target="#js-e-product-image-carousel-portrait" data-slide-to="@( image.Index )">2227 <span style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=50&Height=&Quality=75)"></span>2228 </li>2229 }2230 }2231 }2232 </ol>2233 </div>2234 </div>2235 </div>2236 </div>2237 </div>2238 @sectionEnd()2239 }22402241 @{2242 string landscapeCarouselClassList = "d-none";2243 string carouselLandscapeContainer = "d-none";22442245 bool showLandscapeCarousel = GetLoop( "ImageCategories" ).Any( cl => cl.GetString( "Category.SystemName" ) == "BannerLandscape" );22462247 if ( showLandscapeCarousel == true )2248 {2249 carouselLandscapeContainer = "d-block";2250 }2251 }22522253 @if ( !hasSliderImages )2254 {2255 @sectionStart(2256 sectionClasses: "e-section pb-1",2257 contentClasses: "col-12 col-md-10 mx-auto" )2258 <div class="col-12 @carouselLandscapeContainer">2259 <div class="row">2260 <div class="col-12">2261 <div class="e-product-image-container">2262 <div class="carousel slide il-product-image-carousel-landscape" data-ride="carousel" id="js-e-product-image-carousel-landscape">2263 <div class="border e-product-image-wrapper format-landscape">2264 <div class="carousel-inner">22652266 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) )2267 {2268 if ( imageCategories.GetString( "Category.SystemName" ) == "BannerLandscape" )2269 {2270 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() )2271 {2272 if ( image.Element.Index == 1 )2273 {2274 isActive = "active";2275 }2276 else2277 {2278 isActive = "";2279 }2280 if ( image.Index != 0 )2281 {2282 landscapeCarouselClassList = "d-flex";2283 }2284 <div style="background: url('/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=1500&Height=&Quality=90'); background-size:cover" class="carousel-item @isActive" data-toggle="modal">2285 @*<img src="/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString("Ecom:Product:Detail.Image.Clean")&Format=jpg&Width=1500&Height=&Quality=90" alt="" class="e-product-image" data-slide-to="@(image.Index)">*@2286 </div>2287 }2288 }2289 }22902291 <a class="carousel-control-prev @landscapeCarouselClassList" data-slide="prev" data-target="#js-e-product-image-carousel-landscape"></a>2292 <a class="carousel-control-next @landscapeCarouselClassList" data-slide="next" data-target="#js-e-product-image-carousel-landscape"></a>22932294 </div>2295 </div>2296 <ol class="carousel-indicators custom-thumbs-none @landscapeCarouselClassList">2297 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) )2298 {2299 if ( imageCategories.GetString( "Category.SystemName" ) == "BannerLandscape" )2300 {2301 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() )2302 {2303 if ( image.Element.Index == 1 )2304 {2305 isActive = "active";2306 }2307 else2308 {2309 isActive = "";2310 }2311 <li class="@isActive" data-target="#js-e-product-image-carousel-landscape" data-slide-to="@( image.Index )">2312 <span style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=50&Height=&Quality=75)"></span>2313 </li>2314 }2315 }2316 }2317 </ol>2318 </div>2319 </div>2320 </div>2321 </div>2322 </div>2323 @sectionEnd()2324 }23252326 @*if end*@2327 </div>232823292330 @foreach ( LoopItem group in GetLoop( "ProductRelatedGroups" ) )2331 {2332 if ( group.GetString( "Ecom:Product:RelatedGroup.GroupID" ) != "RELGRP5" )2333 {2334 @ProductRelatedProducts(2335 sectionClasses: "e-section py-3 js-productlist-cylindo",2336 heading: group.GetString( "Ecom:Product:RelatedGroup.Name" ),2337 productLoop: group.GetLoop( "RelatedProducts" ).Take( 4 )2338 )2339 }2340 }23412342 <script type="application/ld+json">2343 {2344 "@@context" : "http://schema.org",2345 "@@type" : "Product",2346 "description" : "@GetString( "Ecom:Product.CategoryField.FinalProduct.TeaserDescription.Value" ).StripHtml()",2347 "sku" : "@GetString("Ecom:Product.Number").StripHtml()",2348 "name" : "@ProductService.Instance.GetName( GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ) ).StripHtml()",2349 "image" : "@primaryImage",2350 "brand" : "Innovation Living",2351 "gtin" : "@GetString("Ecom:Product.Number").StripHtml()"2352 }2353 </script>23542355 <script>2356 dataLayer.push({2357 "ecommerce": {2358 "detail": {2359 "products": [{2360 "name": "@ProductService.Instance.GetName( GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ) )",2361 "id": "@GetString("Ecom:Product.Number")",2362 "price": "0"@*@ProductService.Instance.GetPrice( GetString("Ecom:Product.ID"), GetString("Ecom:Product.VariantID") ).Price.ToJavaScript()*@2363 }]2364 }2365 }2366 });2367 </script>2368236923702371 <code class="js-e-breadcrumb-item-append" data-text="@HttpUtility.HtmlAttributeEncode( GetString( "Ecom:Product.Name" ) )" data-link="@HttpUtility.HtmlAttributeEncode( ProductService.Instance.GetProductLink( GetString( "Ecom:Product.PrimaryOrFirstGroupID" ), GetString( "Ecom:Product.ID" ) ) )"></code>23722373 @sectionStart()23742375 @* MODALS *@2376 @{2377 int fabricDisclamerparagraphID = 0;2378 int madeToOrderDisclamerparagraphID = 0;2379 int blackLabelDisclaimerparagraphID = 0;2380 int redLabelDisclaimerparagraphID = 0;2381 int standardDisclamerparagraphID = 0;2382 int sofasDisclamerParagraphID = 0;2383 int bedsDisclamerParagraphID = 0;23842385 string standardDisclamerparagraph = Espresso.Area.Item.StandardDeliveryDisclamerParagraph;2386 string madeToOrderDeliveryDisclamerParagraph = Espresso.Area.Item.MadeToOrderDeliveryDisclamerParagraph;2387 string blackLabelDisclaimerparagraph = Espresso.Area.Item.BlackLabelDisclaimerParagraph;2388 string redLabelDisclaimerparagraph = Espresso.Area.Item.RedLabelDisclaimerParagraph;2389 string fabricDisclamerParagraph = Espresso.Area.Item.FabricDisclamerParagraph;2390 string sofasDisclamerParagraph = Espresso.Area.Item.SofasDisclaimerParagraph;2391 string bedsDisclamerParagraph = Espresso.Area.Item.BedsDisclaimerParagraph;2392 string productCategoryName = GetString( "Ecom:Product.CategoryField.FinalProduct.ProductType.OptionLabel" );2393 if ( !string.IsNullOrEmpty( standardDisclamerparagraph ) )2394 {2395 int.TryParse( standardDisclamerparagraph.Split( '#' )[ 1 ], out standardDisclamerparagraphID );2396 }2397 if ( !string.IsNullOrEmpty( madeToOrderDeliveryDisclamerParagraph ) )2398 {2399 int.TryParse( madeToOrderDeliveryDisclamerParagraph.Split( '#' )[ 1 ], out madeToOrderDisclamerparagraphID );2400 }2401 if ( !string.IsNullOrEmpty( blackLabelDisclaimerparagraph ) )2402 {2403 int.TryParse( blackLabelDisclaimerparagraph.Split( '#' )[ 1 ], out blackLabelDisclaimerparagraphID );2404 }2405 if ( !string.IsNullOrEmpty( redLabelDisclaimerparagraph ) )2406 {2407 int.TryParse( redLabelDisclaimerparagraph.Split( '#' )[ 1 ], out redLabelDisclaimerparagraphID );2408 }2409 if ( !string.IsNullOrEmpty( fabricDisclamerParagraph ) )2410 {2411 int.TryParse( fabricDisclamerParagraph.Split( '#' )[ 1 ], out fabricDisclamerparagraphID );2412 }2413 if ( !string.IsNullOrEmpty( sofasDisclamerParagraph ) )2414 {2415 int.TryParse( sofasDisclamerParagraph.Split( '#' )[ 1 ], out sofasDisclamerParagraphID );2416 }2417 if ( !string.IsNullOrEmpty( bedsDisclamerParagraph ) )2418 {2419 int.TryParse( bedsDisclamerParagraph.Split( '#' )[ 1 ], out bedsDisclamerParagraphID );2420 }2421 }2422 <div data-category="@productCategoryName" data-paragraph="@sofasDisclamerParagraph" aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="disclaimerModal" role="dialog" tabindex="-1">2423 <div class="modal-dialog modal-dialog-centered" role="document">2424 <div class="modal-content">2425 <div class="modal-header">2426 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - Disclaimer - Heading", "Fabric disclaimer" )</h4>2427 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2428 <span aria-hidden="true">&times;</span>2429 </button>2430 </div>2431 <div class="modal-body">2432 @if ( fabricDisclamerparagraphID > 0 )2433 {2434 @RenderParagraphContent( fabricDisclamerparagraphID )2435 }2436 </div>2437 </div>2438 </div>2439 </div>24402441 <div aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="deliveryStandardModal" role="dialog" tabindex="-1">2442 <div class="modal-dialog modal-dialog-centered" role="document">2443 <div class="modal-content">2444 <div class="modal-header">2445 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - DeliveryInfo - Heading", "Delivery info" )</h4>2446 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2447 <span aria-hidden="true">&times;</span>2448 </button>2449 </div>2450 <div class="modal-body">2451 @if ( standardDisclamerparagraphID > 0 )2452 {2453 @RenderParagraphContent( standardDisclamerparagraphID )2454 }2455 </div>2456 </div>2457 </div>2458 </div>24592460 <div aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="deliveryMadeToOrderModal" role="dialog" tabindex="-1">2461 <div class="modal-dialog modal-dialog-centered" role="document">2462 <div class="modal-content">2463 <div class="modal-header">2464 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - DeliveryInfo - Heading", "Delivery info" )</h4>2465 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2466 <span aria-hidden="true">&times;</span>2467 </button>2468 </div>2469 <div class="modal-body">2470 @if ( madeToOrderDisclamerparagraphID > 0 )2471 {2472 @RenderParagraphContent( madeToOrderDisclamerparagraphID )2473 }2474 </div>2475 </div>2476 </div>2477 </div>24782479 <div aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="deliveryBlackModal" role="dialog" tabindex="-1">2480 <div class="modal-dialog modal-dialog-centered" role="document">2481 <div class="modal-content">2482 <div class="modal-header">2483 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - DeliveryInfo - Heading", "Delivery info" )</h4>2484 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2485 <span aria-hidden="true">&times;</span>2486 </button>2487 </div>2488 <div class="modal-body">2489 @if ( blackLabelDisclaimerparagraphID > 0 )2490 {2491 @RenderParagraphContent( blackLabelDisclaimerparagraphID )2492 }2493 </div>2494 </div>2495 </div>2496 </div>24972498 <div aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="deliveryRedModal" role="dialog" tabindex="-1">2499 <div class="modal-dialog modal-dialog-centered" role="document">2500 <div class="modal-content">2501 <div class="modal-header">2502 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - DeliveryInfo - Heading", "Delivery info" )</h4>2503 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2504 <span aria-hidden="true">&times;</span>2505 </button>2506 </div>2507 <div class="modal-body">2508 @if ( redLabelDisclaimerparagraphID > 0 )2509 {2510 @RenderParagraphContent( redLabelDisclaimerparagraphID )2511 }2512 </div>2513 </div>2514 </div>2515 </div>25162517 @if ( !string.IsNullOrEmpty( overviewIllustration ) )2518 {2519 <div aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="overviewIllustrationModal" role="dialog" tabindex="-1">2520 <div class="modal-dialog modal-dialog-centered" role="document">2521 <div class="modal-content">2522 <div class="modal-header">2523 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - Overview illustration - Heading", "Overview illustration" )</h4>2524 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2525 <span aria-hidden="true">&times;</span>2526 </button>2527 </div>2528 <div class="modal-body text-center">2529 <img src="@overviewIllustration" alt="" class="p-img"/>2530 </div>2531 </div>2532 </div>2533 </div>2534 }25352536 @if ( sofasDisclamerParagraphID > 0 )2537 {2538 <div aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="disclaimerSofaBedsModal" role="dialog" tabindex="-1">2539 <div class="modal-dialog modal-dialog-centered" role="document">2540 <div class="modal-content">2541 <div class="modal-header">2542 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - Sofas Disclaimer - Heading", "Measurement disclaimer" )</h4>2543 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2544 <span aria-hidden="true">&times;</span>2545 </button>2546 </div>2547 <div class="modal-body">2548 @RenderParagraphContent( sofasDisclamerParagraphID )2549 </div>2550 </div>2551 </div>2552 </div>2553 @SnippetStart( "SofaDisclaimerButton" )2554 <span class="disclaimer-button">2555 <a data-target="#disclaimerSofaBedsModal" data-toggle="modal" href="/">?</a>2556 </span>2557 @SnippetEnd( "SofaDisclaimerButton" )2558 }25592560 @if ( bedsDisclamerParagraphID > 0 )2561 {2562 <div aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="disclaimerBedsModal" role="dialog" tabindex="-1">2563 <div class="modal-dialog modal-dialog-centered" role="document">2564 <div class="modal-content">2565 <div class="modal-header">2566 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - Beds Disclaimer - Heading", "Measurement disclaimer" )</h4>2567 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2568 <span aria-hidden="true">&times;</span>2569 </button>2570 </div>2571 <div class="modal-body">2572 @RenderParagraphContent( bedsDisclamerParagraphID )2573 </div>2574 </div>2575 </div>2576 </div>2577 @SnippetStart( "bedDisclaimerButton" )2578 <span class="disclaimer-button">2579 <a data-target="#disclaimerBedsModal" data-toggle="modal" href="/">?</a>2580 </span>2581 @SnippetEnd( "bedDisclaimerButton" )2582 }25832584 @{2585 string ogImageContent = string.Format( "{0}://{1}{2}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, GetString( "Ecom:Product.ImageDefault.Clean" ) );2586 string ogDescriptionContent = Regex.Replace( Regex.Replace( GetString( "Ecom:Product.CategoryField.FinalProduct.TeaserDescription.Value" ), "<.*?>", String.Empty ), "&nbsp;", string.Empty );2587 }25882589 @SnippetStart( "productSpecificData" )2590 <meta property="og:type" content="product">2591 <meta property="og:title" content="@ProductService.Instance.GetName( GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ) )">2592 <meta property="og:description" content="@ogDescriptionContent">2593 <meta property="og:image" content="@ogImageContent">2594 @SnippetEnd( "productSpecificData" )259525962597 @SnippetStart( "prodinnologos" )2598 <a class="e-logo-link" href="@( isBlackTextile ? "/black" : "/" )">2599 <img src="@( isBlackTextile ? Espresso.Area.Item.BlackLabelLogoPrimary : Espresso.Area.Item.LogoPrimary )" class="e-logo-img e-logo-img-primary" alt="@Espresso.Area.Item.CompanyName">2600 <img src="@( isBlackTextile ? Espresso.Area.Item.BlackLabelLogoSecondary : Espresso.Area.Item.LogoSecondary )" class="e-logo-img e-logo-img-secondary" alt="@Espresso.Area.Item.CompanyName">26012602 @if ( string.IsNullOrEmpty( tagline ) == false )2603 {2604 <p class="e-logo-tagline">@tagline</p>2605 }2606 </a>2607 @SnippetEnd( "prodinnologos" )2608
keyboard_arrow_up