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"> </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> @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> @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> @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> @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"> </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">×</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">×</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">×</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">×</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">×</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">×</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">×</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">×</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 ), " ", 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_upWelcome
You are about to visit our Asia website.
If you prefer to visit a website that's more suitable for your
location, please select from the options below, or continue to the current website.