Error executing template "Designs/dechra-dvp/eCom/Productlist/dvp-product-list.cshtml"
System.Net.WebException: The operation has timed out
   at System.Net.HttpWebRequest.GetResponse()
   at CompiledRazorTemplates.Dynamic.RazorEngine_c071c2a4c3e740bd80fe6334db040719.DietApi(String method, String productNumber, String cultureInfoName) in D:\Dynamicweb.NET\Solutions\eu.dvp.dechra.espresso4.dk\Files\Templates\Designs\dechra-dvp\eCom\Productlist\dvp-product-list.cshtml:line 4415
   at CompiledRazorTemplates.Dynamic.RazorEngine_c071c2a4c3e740bd80fe6334db040719.Execute() in D:\Dynamicweb.NET\Solutions\eu.dvp.dechra.espresso4.dk\Files\Templates\Designs\dechra-dvp\eCom\Productlist\dvp-product-list.cshtml:line 4508
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits Co3.Espresso.Website.TemplateBases.Paragraphs.Module 2 @using System.Collections.Generic 3 @using Co3.Espresso.Base.Extensions; 4 @using Co3.Dechra.DVP.Website.UiServices; 5 @using System.Linq; 6 @using System.Web; 7 @using System.Net; 8 @using System.Text.RegularExpressions; 9 @using Co3.Espresso.Website.Services; 10 @using Dynamicweb.Ecommerce; 11 @using System.Collections.Generic; 12 @using Dynamicweb.Frontend; 13 @using Dynamicweb.Content; 14 @using Dynamicweb.Frontend.Devices 15 16 @using System.Web; 17 @using Dynamicweb.Frontend; 18 @using Dynamicweb.Content; 19 20 @helper signIn() 21 { 22 PageView currentPageView = PageView.Current(); 23 Area area = currentPageView.Area; 24 25 string redirectToFrontpage = string.Empty; 26 27 if(HttpContext.Current.Request.QueryString["RecoveryToken"] != null) 28 { 29 redirectToFrontpage = "/"; 30 } 31 32 string signUpPage = area.Item["SignUpPage"].ToString(); 33 34 string azureAuthenticationSignUpSignInPolicyId = area.Item["SignUpSignInPolicyId"].ToString(); 35 36 37 string forgotPasswordPage = area.Item["ForgotPasswordPage"].ToString(); 38 39 <div class="col-12 col-xl-6 mt-3 d-flex"> 40 <div class="w-100 px-2 py-2 px-lg-5 py-lg-3 bg-light"> 41 <h3 class="pb-1"><i class="material-icons">lock</i> @Translate("Sign in to your Dechra account", "Sign in to your Dechra account")</h3> 42 43 @if(!string.IsNullOrEmpty(azureAuthenticationSignUpSignInPolicyId)) 44 { 45 <p> 46 <a class="btn btn-primary" href="/Admin/Public/Social/ExternalLogin.aspx?action=login&providerID=1">@Translate("Sign in", "Sign in")</a> 47 </p> 48 } 49 else 50 { 51 <form method="post" action="@redirectToFrontpage" name="ExtUserForm"> 52 <div class="row"> 53 <div class="col-12 form-fields"> 54 <input maxlength="250" class="form-control required" placeholder='@Translate("Username", "Username")' name="Username" type="text" value="" /> 55 </div> 56 <div class="col-12 form-fields"> 57 <input maxlength="250" class="form-control required" placeholder='@Translate("Password", "Password")' type="password" name="Password" value="" /> 58 </div> 59 </div> 60 <div class="row pt-2"> 61 <div class="col-12 pb-1 d-flex flex-wrap align-items-center justify-content-between"> 62 <a class="small" href="/Default.aspx?ID=@forgotPasswordPage&LoginAction=Recovery">@Translate("Forgot your password?", "Forgot your password?")</a> <button class="btn btn-primary" type="submit">@Translate("Sign in", "Sign in")</button> 63 </div> 64 </div> 65 </form> 66 } 67 </div> 68 </div> 69 70 <div class="col-12 col-xl-6 mt-3 d-flex"> 71 <div class="w-100 px-2 py-2 px-lg-5 py-lg-3 bg-light"> 72 <h3><i class="material-icons">account_box</i> @Translate("Don't have an account yet?", "Don't have an account yet?")</h3> 73 <div class="row"> 74 <div class="col-12 small"> 75 <p class="mb-1">@Translate("Sign up now to access:", "Sign up now to access:")</p> 76 <ul> 77 <li>@Translate("Complete product and disease information", "Complete product and disease information")</li> 78 <li>@Translate("Free support materials, videos and webcasts", "Free support materials, videos and webcasts")</li> 79 <li>@Translate("Dechra Academy: Our FREE eLearning platform", "Dechra Academy: Our FREE eLearning platform")</li> 80 </ul> 81 </div> 82 </div> 83 <div class="row"> 84 <div class="col-12 text-right"> 85 <a class="btn btn-cta" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up", "Sign up")</a> 86 </div> 87 </div> 88 </div> 89 </div> 90 } 91 92 @{ 93 PageView currentPageView = PageView.Current(); 94 Area currentArea = currentPageView.Area; 95 int groupCount = GetLoop("Subgroups").Count(); 96 int productCount = GetLoop("Products").Count(); 97 string groupColSize = string.Empty; 98 string pageId = GetGlobalValue("Global:Page.ID"); 99 string productPageId = currentArea.Item["ProductPage"].ToString(); 100 bool shopIsActive = Espresso.Page.Area.Item.GetValue<bool>("Shop"); 101 bool isMobile = (PageView.Current().Device == DeviceType.Mobile); 102 103 bool hasAccess = ExtranetUiService.HasAccess(); 104 bool restrictProductList = Espresso.Page.Area.Item.GetValue<bool>("RestrictProductList"); 105 bool restrictProductDetails = Espresso.Page.Area.Item.GetValue<bool>("RestrictProductDetails"); 106 bool restrictProductFiles = Espresso.Page.Area.Item.GetValue<bool>("RestrictProductFiles"); 107 108 string restrictProductFileTypesValue = Espresso.Page.Area.Item.GetValue< string >( "RestrictProductFileTypes" ); 109 List<string> restrictProductFileTypes = !string.IsNullOrEmpty(restrictProductFileTypesValue) ? restrictProductFileTypesValue.Split( ',' ).ToList() : new List< string >(); 110 111 bool showProductFileTypeDatasheet = true; 112 bool showProductFileTypePackInsert = true; 113 bool showProductFileTypeSPC = true; 114 bool showProductFileTypeMSDS = true; 115 116 bool restrictProductFileTypeDatasheet = restrictProductFileTypes.Contains( "Datasheet" ); 117 bool restrictProductFileTypePackInsert = restrictProductFileTypes.Contains( "Pack Insert" ); 118 bool restrictProductFileTypeSPC = restrictProductFileTypes.Contains( "SPC" ); 119 bool restrictProductFileTypeMSDS = restrictProductFileTypes.Contains( "MSDS" ); 120 121 if(restrictProductFileTypeDatasheet) 122 { 123 if(!hasAccess) 124 { 125 showProductFileTypeDatasheet = false; 126 } 127 } 128 if(restrictProductFileTypePackInsert) 129 { 130 if(!hasAccess) 131 { 132 showProductFileTypePackInsert = false; 133 } 134 } 135 if(restrictProductFileTypeSPC) 136 { 137 if(!hasAccess) 138 { 139 showProductFileTypeSPC = false; 140 } 141 } 142 if(restrictProductFileTypeMSDS) 143 { 144 if(!hasAccess) 145 { 146 showProductFileTypeMSDS = false; 147 } 148 } 149 150 151 bool restrictSupportMaterials = Espresso.Page.Area.Item.GetValue<bool>("RestrictSupportMaterials"); 152 153 bool rangeListLevel = true; 154 bool sortedDESC = false; 155 bool showFilters = true; 156 List<LoopItem> rangeSortOrder = GetLoop("Ranges"); 157 158 159 if( Espresso.Item.FiltersShow != null && Espresso.Item.FiltersShow == "False" ) { 160 showFilters = false; 161 } 162 163 string sortOrder = string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["SortOrder"]) ? Espresso.Item.ModuleOverride_SortOrder : System.Web.HttpContext.Current.Request["SortOrder"]; 164 165 if(Espresso.Item.ModuleOverride_SortOrder != null && sortOrder == "DESC") 166 { 167 sortedDESC = true; 168 rangeSortOrder = GetLoop("Ranges").OrderByDescending(ro => ro.GetString("Range")).ToList(); 169 } 170 171 groupColSize = groupCount < 4 ? "4" : "3"; 172 173 } 174 175 @{ 176 if(!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["GroupID"]) && GetLoop("Subgroups").Count() == 0) 177 { 178 rangeListLevel = false; 179 } 180 181 if(rangeListLevel) 182 { 183 if(!string.IsNullOrEmpty(GetString("Ecom:Group.Name"))) 184 { 185 <div class="row mb-1 mb-md-2"> 186 <div class="col-12"> 187 <h1 class="d-block d-md-inline mb-0">@GetString("Ecom:Group.Name")</h1> 188 @if(GetInteger("Ecom:Group.ProductCount") > 0) 189 { 190 string productGroupListCountTranslation = GetInteger("Ecom:Group.ProductCount") == 1 ? productGroupListCountTranslation = Translate("product","product") : Translate("products","products"); 191 192 <small class="d-block d-md-inline my-0 font-weight-normal h3"> (@GetInteger("Ecom:Group.ProductCount") @productGroupListCountTranslation)</small> 193 } 194 @if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.Teaser"))) 195 { 196 <p class="lead mb-0 mt-2">@GetString("Ecom:Group:Field.Teaser")</p> 197 } 198 </div> 199 </div> 200 } 201 else 202 { 203 if( Espresso.Item.HeadingShow != null && Espresso.Item.HeadingShow == "True" ){ 204 <div class="row"> 205 <div class="col-12"> 206 <h1>@Espresso.Item.Name</h1> 207 </div> 208 </div> 209 } 210 } 211 if(groupCount > 0 && productCount < 1) 212 { 213 <div class="row"> 214 @foreach(LoopItem subgroup in @GetLoop("Subgroups")) 215 { 216 string groupId = subgroup.GetString("Ecom:Group.ID"); 217 string groupName = subgroup.GetString("Ecom:Group.Name"); 218 string groupImage = subgroup.GetString("Ecom:Group.LargeImage"); 219 string groupDescription = subgroup.GetString("Ecom:Group.Description"); 220 string groupUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}"; 221 222 <div class="p col-12 col-sm-6 col-lg-@groupColSize p-card p-card-top-bottom p-card-txt-small"> 223 <div class="card"> 224 <a href="@groupUrl" title="@groupName"> 225 <p class="card-header font-weight-bold text-center">@groupName</p> 226 @if(!string.IsNullOrEmpty(groupImage)) 227 { 228 <div class="p-img-container"> 229 <div class="row"> 230 <div class="col-12"> 231 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@groupImage&amp;Format=jpg&amp;Width=600&amp;Quality=75" class="p-img" alt="@groupName"> 232 </div> 233 </div> 234 </div> 235 } 236 @if(!string.IsNullOrEmpty(groupDescription)) 237 { 238 <div class="p-txt-container"> 239 <div class="card-body"> 240 <p class="small">@groupDescription</p> 241 </div> 242 </div> 243 } 244 </a> 245 </div> 246 </div> 247 } 248 </div> 249 } 250 else 251 { 252 if(string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["GroupID"]) && pageId == productPageId) 253 { 254 255 Dynamicweb.Ecommerce.Products.GroupCollection groups = Dynamicweb.Ecommerce.Products.Group.GetToplevelGroups(currentArea.EcomLanguageId); 256 257 <div class="row mb-2"> 258 <div class="col-12"> 259 <h1 class="d-inline">@GetGlobalValue("Global:Page.Name")</h1> 260 </div> 261 </div> 262 <div class="row"> 263 @foreach( Dynamicweb.Ecommerce.Products.Group group in groups.Where(gr=> gr.ShopId.Equals(currentArea.EcomShopId) && gr.NavigationShowInMenu.Equals(true) && gr.NavigationClickable.Equals(true))) 264 { 265 if ( currentArea.ID == 67 || currentArea.ID == 75 || currentArea.ID == 77 || currentArea.ID == 78 || currentArea.ID == 79 || currentArea.ID == 64 || currentArea.ID == 65 || currentArea.ID == 84 ) 266 { 267 string groupName = group.Name; 268 string groupUrl = $"/Default.aspx?ID={pageId}&GroupID={group.Id}"; 269 string groupImage = group.LargeImage; 270 string groupDescription = group.Description; 271 272 <div class="p col-12 col-sm-6 col-lg-@groupColSize p-card p-card-top-bottom p-card-txt-small"> 273 <div class="card"> 274 <a href="@groupUrl" title="@groupName"> 275 <p class="card-header font-weight-bold text-center">@groupName</p> 276 @if(!string.IsNullOrEmpty(groupImage)) 277 { 278 <div class="p-img-container"> 279 <div class="row"> 280 <div class="col-12"> 281 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@groupImage&amp;Format=jpg&amp;Width=600&amp;Quality=75" class="p-img" alt="@groupName"> 282 </div> 283 </div> 284 </div> 285 } 286 @if(!string.IsNullOrEmpty(groupDescription)) 287 { 288 <div class="p-txt-container"> 289 <div class="card-body"> 290 <p class="small">@groupDescription</p> 291 </div> 292 </div> 293 } 294 </a> 295 </div> 296 </div> 297 } 298 else 299 { 300 Dynamicweb.Ecommerce.Products.GroupCollection subgroups = group.Subgroups; 301 302 foreach(Dynamicweb.Ecommerce.Products.Group subgroup in subgroups.Where(sgr=> sgr.NavigationClickable.Equals(true) && sgr.NavigationShowInMenu.Equals(true))) 303 { 304 string groupName = subgroup.Name; 305 string groupUrl = $"/Default.aspx?ID={pageId}&GroupID={subgroup.Id}"; 306 string groupImage = subgroup.LargeImage; 307 string groupDescription = subgroup.Description; 308 309 <div class="p col-12 col-sm-6 col-lg-@groupColSize p-card p-card-top-bottom p-card-txt-small"> 310 <div class="card"> 311 <a href="@groupUrl" title="@groupName"> 312 <p class="card-header font-weight-bold text-center">@groupName</p> 313 @if(!string.IsNullOrEmpty(groupImage)) 314 { 315 <div class="p-img-container"> 316 <div class="row"> 317 <div class="col-12"> 318 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@groupImage&amp;Format=jpg&amp;Width=600&amp;Quality=75" class="p-img" alt="@groupName"> 319 </div> 320 </div> 321 </div> 322 } 323 @if(!string.IsNullOrEmpty(groupDescription)) 324 { 325 <div class="p-txt-container"> 326 <div class="card-body"> 327 <p class="small">@groupDescription</p> 328 </div> 329 </div> 330 } 331 </a> 332 </div> 333 </div> 334 } 335 } 336 } 337 </div> 338 } 339 else 340 { 341 if(rangeSortOrder.Count() > 0) 342 { 343 if(!restrictProductList || hasAccess) 344 { 345 <div class="row"> 346 <div class="col-12"> 347 <div class="row align-items-end"> 348 @if(showFilters) 349 { 350 <div class="col-12 col-sm-3"> 351 <h3 class="mb-0">@Translate("Narrow your results","Narrow your results")</h3> 352 <hr class="mt-1 mb-1 mb-md-2"> 353 </div> 354 } 355 <div class="col-12 @(showFilters?"col-sm-9 text-md-right":"d-flex justify-content-between")"> 356 @if(!showFilters && productCount>0) 357 { 358 string productListCountTranslation = productCount==1 ? Translate("product","product") : Translate("products","products"); 359 360 <small class="font-weight-normal h3"> (@productCount @productListCountTranslation)</small> 361 } 362 @if( Espresso.Item.SortShow == null || Espresso.Item.SortShow == "True"){ 363 <form class="hidden-mobile"> 364 <label class="mr-sm-2 d-block d-md-inline font-weight-bold" for="sortProducts">@Translate("Sort by","Sort by"):</label> 365 <select class="custom-select d-block d-md-inline mb-2 mb-sm-0 sortProducts" id="sortProducts"> 366 <option value="ASC" @(sortedDESC?"":"selected")>@Translate("Name: A-Z","Name: A-Z")</option> 367 <option value="DESC" @(sortedDESC?"selected":"")>@Translate("Name: Z-A","Name: Z-A")</option> 368 </select> 369 </form> 370 } 371 @if(showFilters) 372 { 373 <hr class="my-1 mb-2 hidden-mobile"> 374 } 375 </div> 376 </div> 377 </div> 378 379 @if(showFilters) 380 { 381 <div class="col-12 col-sm-3"> 382 <div class="js-e-productlist"> 383 @using Dynamicweb.Ecommerce.Products; 384 @using Dynamicweb.Ecommerce.Products.Categories; 385 @functions { 386 public FieldOption GetTranslatedProductCategoryFieldOption(string value, string categoryId, string fieldId) 387 { 388 FieldOption translatedFieldOption = null; 389 390 var collection = Dynamicweb.Ecommerce.Products.Categories.Category.GetCategories(Dynamicweb.Ecommerce.Common.Context.LanguageID); 391 Category category = collection.FirstOrDefault(c => c.Id.Equals(categoryId)); 392 393 if (category.Fields != null) 394 { 395 Field field = category.Fields.FirstOrDefault(f => f.Id.Equals(fieldId)); 396 if (field != null && field.FieldOptions != null) 397 { 398 translatedFieldOption = field.FieldOptions.FirstOrDefault(fo => fo.Value.Equals(value)); 399 } 400 } 401 402 return translatedFieldOption; 403 } 404 } 405 @if (GetLoop("FacetGroups").Count > 0) 406 { 407 Dictionary<string,Dictionary<string,string>> selectedOptions = new Dictionary<string,Dictionary<string,string>>(); 408 409 <div id="js-e-productlist-filters"> 410 <form class="js-e-productlist-form" novalidate="novalidate"> 411 <input type="hidden" name="SortOrder" value="@(sortedDESC ? "DESC" : "ASC")"> 412 <input type="hidden" class="js-e-visible-options-count" value="@Espresso.Item.FiltersVisibleOptionCount"> 413 <div class="row"> 414 @foreach (LoopItem facetGroup in GetLoop("FacetGroups")) 415 { 416 foreach (LoopItem facet in facetGroup.GetLoop("Facets")) 417 { 418 string facetGroupFacetName = facet.GetString("Facet.Name"); 419 string facetGroupFacetNameTranslated = Translate( $"Filter_Facet_Label_{facetGroupFacetName}", facetGroupFacetName ); 420 421 string facetGroupFacetField = facet.GetString("Facet.Field"); 422 423 string facetQueryParameter = facet.GetString("Facet.QueryParameter"); 424 425 string facetGroupFacetType = facet.GetString("Facet.RenderType"); 426 427 int espressoItemfiltersVisibleOptionCount; 428 int facetOptionsCount = facet.GetInteger("Facet.OptionResultTotalCount"); 429 int facetNotEmptyOptionsCount = facet.GetLoop("FacetOptions").Where(o => !o.GetInteger("FacetOption.Count").Equals(0)).Count(); 430 431 bool hasEspressoItemfiltersVisibleOptionCount = Int32.TryParse( Espresso.Item.FiltersVisibleOptionCount, out espressoItemfiltersVisibleOptionCount ); 432 433 string[] productCategoryIds = facetGroupFacetField.Split('|'); 434 435 var facetOptions = facet.GetLoop("FacetOptions"); 436 437 if (facetOptionsCount > 0) 438 { 439 <div class="js-e-productlist-filters-group col-12"> 440 <p class="e-productlist-filters-group-header font-weight-bold mb-0"> 441 <span class="e-productlist-filters-group-name">@facetGroupFacetNameTranslated</span> 442 </p> 443 <fieldset class="e-productlist-filters-group-options js-e-productlist-filters-group-options small mt-half"> 444 <div class="@(isMobile && hasEspressoItemfiltersVisibleOptionCount && facetNotEmptyOptionsCount > espressoItemfiltersVisibleOptionCount ? "js-e-productlist-filters-options-collapse-peek e-productlist-filters-options-collapse-peek is-peeking" : "")"> 445 @if(facetGroupFacetType == "Checkboxes"){ 446 <div class="e-productlist-filters-option js-e-productlist-filters-option"> 447 <label for="reset-filter-@facetGroupFacetName" class="custom-control custom-checkbox mb-1"> 448 <input class="js-e-productlist-filters-option-reset-group custom-control-input" name="@facetQueryParameter" id="reset-filter-@facetGroupFacetName" type="checkbox" value=""> 449 <span class="custom-control-indicator"></span> 450 <span class="custom-control-description">@Translate("All","All")</span> 451 </label> 452 </div> 453 foreach (LoopItem facetOption in facetOptions) 454 { 455 456 string value = facetOption.GetString("FacetOption.Value"); 457 bool selected = facetOption.GetBoolean("FacetOption.Selected"); 458 459 Dictionary<string,string> selectedOption = new Dictionary<string,string>(); 460 selectedOption.Add(value, facetQueryParameter); 461 462 if(facetNotEmptyOptionsCount < 2) 463 { 464 selected = true; 465 } 466 467 string label = facetOption.GetString("FacetOption.Label"); 468 int count = facetOption.GetInteger("FacetOption.Count"); 469 string cssClass = ""; 470 string disabled = string.Empty; 471 472 FieldOption optionLabel = null; 473 474 if(!string.IsNullOrEmpty(productCategoryIds[1]) && !string.IsNullOrEmpty(productCategoryIds[2])) 475 { 476 optionLabel = GetTranslatedProductCategoryFieldOption(value.ToString(), productCategoryIds[1], productCategoryIds[2]); 477 if(optionLabel != null) 478 { 479 label = optionLabel.Name; 480 } 481 } 482 483 if(selected && count > 0) 484 { 485 selectedOptions.Add($"{facetGroupFacetNameTranslated} / {label}", selectedOption); 486 } 487 488 if (count > 0) 489 { 490 <div class="e-productlist-filters-option js-e-productlist-filters-option @(selected ? "is-selected" : "")"> 491 <label for="facet_@(facetGroupFacetName)_@value" class="custom-control custom-checkbox @cssClass" title="@label"> 492 <input id="facet_@(facetGroupFacetName)_@value" name="@facetQueryParameter" class="js-e-productlist-filter custom-control-input" type="checkbox" value="@value" checked="@selected" @disabled> 493 <span class="custom-control-indicator"></span> 494 <span class="custom-control-description text-truncate">@label</span> 495 <span class="e-productlist-filters-option-count small text-muted">&nbsp;(@count)</span> 496 </label> 497 </div> 498 } 499 } 500 } 501 @if ( isMobile && hasEspressoItemfiltersVisibleOptionCount && facetNotEmptyOptionsCount > espressoItemfiltersVisibleOptionCount ) 502 { 503 <a href="javascript:void(0);" class="js-e-productlist-filters-options-collapse-peek-toggle e-productlist-filters-options-collapse-peek-toggle small" data-closed-text="@Translate( "eCom Productlist Filter - Options Show More - Link", "Show more" )" data-open-text="@Translate( "eCom Productlist Filter - Options Show Less - Link", "Show less" )"><i class="material-icons">keyboard_arrow_down</i></a> 504 } 505 </div> 506 </fieldset> 507 <hr class="my-1"> 508 </div> 509 } 510 } 511 } 512 @if(selectedOptions.Count() > 0) 513 { 514 <div class="e-productlist-filters-group border-0 col-12 order-first"> 515 <p class="e-productlist-filters-group-header small mb-1"> 516 <a href="javascript:void(0);" class="reset-filter d-block text-left pl-0 js-e-productlist-filters-clear-all"> 517 <i class="material-icons material-icons-fixed text-danger text-left mr-1">clear</i>@Translate("eCom Productlist Filters - Reset Filters - Button", "Reset all") 518 </a> 519 </p> 520 <div class="small"> 521 <ul class="e-productlist-filters-group-options-selected list-unstyled mb-1"> 522 @foreach(KeyValuePair<string, Dictionary<string,string>> selectedOption in selectedOptions) 523 { 524 string value = selectedOption.Value.Keys.FirstOrDefault(); 525 string systemName = selectedOption.Value.Values.FirstOrDefault(); 526 527 <li class="e-productlist-filters-option-selected is-selected-active pl-0"> 528 <a class="js-e-productlist-filters-remove d-block text-truncate" href="javascript:void(0);" data-system-name="@systemName" data-value="@value"><i class="material-icons material-icons-fixed text-danger text-left mr-1">clear</i>@selectedOption.Key</a> 529 </li> 530 } 531 </ul> 532 </div> 533 <hr class="my-1"> 534 </div> 535 } 536 </div> 537 </form> 538 </div> 539 } 540 541 </div> 542 @if ( Espresso.Item.SortShow == null || Espresso.Item.SortShow == "True" ) 543 { 544 <form class="hidden-desktop mb-2"> 545 <select class="custom-select d-inline form-control sortProducts"> 546 <option value="ASC" @(sortedDESC ? "" : "selected")>@Translate( "Name: A-Z", "Name: A-Z" )</option> 547 <option value="DESC" @(sortedDESC ? "selected" : "")>@Translate( "Name: Z-A", "Name: Z-A" )</option> 548 </select> 549 </form> 550 } 551 </div> 552 } 553 554 <div class="col-12 @(showFilters?"col-sm-9":"") dvp-ranges-list"> 555 @if(!showFilters) 556 { 557 <hr class="mt-1"> 558 } 559 <div class="row"> 560 @foreach(LoopItem range in rangeSortOrder) 561 { 562 string rangeGroupId = ""; 563 564 int productInt = 0; 565 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 566 string rangeName = range.GetString("Range"); 567 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>"); 568 string rangeNameCleaned = Regex.Replace(rangeName, @"[^A-Za-z0-9_\~]+", "-"); 569 570 <div class="col-12 col-lg-6 mb-3"> 571 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames") ? "dvp-range-header" : "")"> 572 <h3>@rangeNameSuperscripted@(productsInRangeCount > 1 ? $" <small class='font-weight-normal'>({productsInRangeCount} {Translate("products","products")})</small>" : "")</h3> 573 </div> 574 <div class="col-12 px-1 pt-1 border dvp-range"> 575 <div> 576 <div class="row"> 577 @foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 578 { 579 Dynamicweb.Ecommerce.Products.Product p = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")); 580 581 if(!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["GroupID"])) 582 { 583 Dynamicweb.Ecommerce.Products.GroupCollection gc = p.Groups; 584 585 foreach(Dynamicweb.Ecommerce.Products.Group g in gc.Where(g=>g.Subgroups.Count() == 0)) 586 { 587 if(!g.ParentGroups.ContainsById(System.Web.HttpContext.Current.Request["GroupID"])) 588 { 589 foreach(Dynamicweb.Ecommerce.Products.Group sg in g.ParentGroups) 590 { 591 if(sg.ParentGroups.ContainsById(System.Web.HttpContext.Current.Request["GroupID"])) 592 { 593 rangeGroupId = g.Id; 594 } 595 } 596 } 597 else 598 { 599 rangeGroupId = g.Id; 600 } 601 } 602 } 603 else 604 { 605 rangeGroupId = p.PrimaryGroupId; 606 } 607 608 if(!product.GetBoolean("Ecom:Product:Field.AwaitingApproval")) 609 { 610 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage"); 611 } 612 613 if(productInt == 2) 614 { 615 @:</div> 616 @:</div> 617 @:<div class="collapse" id="range-@rangeNameCleaned"> 618 @:<div class="row"> 619 } 620 621 string url = string.Empty; 622 623 string urlFriendlyProduct = string.Empty; 624 625 string productName = product.GetString("Ecom:Product.Name"); 626 627 bool hideProductName = product.GetBoolean("Ecom:Product:Field.HideProductName"); 628 629 string productDisplayName = productName; 630 string productTitleName = productName; 631 632 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 633 { 634 if(hideProductName) 635 { 636 productDisplayName = rangeNameSuperscripted; 637 productTitleName = rangeName; 638 } 639 else 640 { 641 productDisplayName = $"{rangeNameSuperscripted} {productName}"; 642 productTitleName = $"{rangeName} {productName}"; 643 } 644 } 645 646 if(product.GetBoolean("Ecom:Product:Field.IsDiets")) 647 { 648 url = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 649 } 650 else 651 { 652 url = productName; 653 } 654 655 if(productsInRangeCount > 1) 656 { 657 urlFriendlyProduct = $"#{Regex.Replace(url, @"[^A-Za-z0-9_\~]+", "-")}"; 658 } 659 660 string productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 661 string productUrl = "javascript:void(0);"; 662 663 if(!string.IsNullOrEmpty(rangeGroupId)) 664 { 665 productUrl = $"/Default.aspx?ID={pageId}&GroupID={rangeGroupId}{urlFriendlyProduct}"; 666 } 667 668 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center"> 669 <a href="@productUrl" title="@productTitleName"> 670 <div class="row"> 671 <div class="col-12 dvp-image-container"> 672 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@productTitleName"> 673 </div> 674 <div class="col-12"> 675 <p class="m-0 small dvp-range-product-name">@productDisplayName</p> 676 </div> 677 </div> 678 </a> 679 </div> 680 681 productInt++; 682 } 683 </div> 684 </div> 685 <div class="row mt-1 dvp-view-more-products"> 686 @if(productsInRangeCount > 2) 687 { 688 int amountOfProductsLeft = productsInRangeCount - 2; 689 690 string amountOfProductsLeftTranslation = productsInRangeCount == 3 ? Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product") : Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products"); 691 692 string amountOfProductsLeftTranslationReplaced = amountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", amountOfProductsLeft.ToString()); 693 694 <div class="col-12"> 695 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more"> 696 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@rangeNameCleaned" aria-expanded="false" aria-controls="range-@rangeNameCleaned" href="javascript:void(0);"> 697 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @amountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span> 698 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span> 699 </a> 700 </p> 701 </div> 702 } 703 </div> 704 </div> 705 706 </div> 707 } 708 </div> 709 </div> 710 </div> 711 712 } 713 else 714 { 715 <div class="row"> 716 @signIn() 717 </div> 718 } 719 } 720 } 721 } 722 } 723 else 724 { 725 if(!restrictProductDetails || hasAccess) 726 { 727 foreach(LoopItem range in rangeSortOrder) 728 { 729 LoopItem productType = range.GetLoop("ProductsInRange").FirstOrDefault(); 730 731 if(productType.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductType.Value") == "pharma") 732 { 733 string rangeName = range.GetString("Range"); 734 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>"); 735 string rangeId = string.Empty; 736 string therapyAreaId = string.Empty; 737 string therapyAreaName = string.Empty; 738 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 739 string optionalName = string.Empty; 740 string displayName = string.Empty; 741 string displayNameSuperscripted = string.Empty; 742 string groupId = string.Empty; 743 string productName = string.Empty; 744 string productNameJSON = string.Empty; 745 string productDisplayName = string.Empty; 746 string productDisplayNameSuperscripted = string.Empty; 747 string urlFriendlyProductName = string.Empty; 748 string productShortDescription = string.Empty; 749 string productShortDescriptionJSON = string.Empty; 750 string productActives = string.Empty; 751 string productActivesJSON = string.Empty; 752 string productStorageCondition = string.Empty; 753 string productStorageConditionJSON = string.Empty; 754 string productPackSize = string.Empty; 755 string productWithdrawalPeriod = string.Empty; 756 string lyticsTopics = string.Empty; 757 string productDatasheet = string.Empty; 758 string productPackInsert = string.Empty; 759 string productSPC = string.Empty; 760 string productMSDS = string.Empty; 761 bool hasDocuments = true; 762 string productDisclaimer = string.Empty; 763 string productDisclaimerJSON = string.Empty; 764 string productShopInformation = string.Empty; 765 string productShopInformationJSON = string.Empty; 766 string productImage = string.Empty; 767 string productRewardButtonLink = string.Empty; 768 string productRewardButtonLinkProcessed = string.Empty; 769 string productRewardButtonText = string.Empty; 770 bool showRewardButton = false; 771 string productRewardAdditionalLink = string.Empty; 772 string productRewardAdditionalLinkProcessed = string.Empty; 773 bool showRewardAdditionalLink = false; 774 bool productShowFooterContent = false; 775 string productFooterContent = string.Empty; 776 string productFooterContentJSON = string.Empty; 777 List<string> images = new List<string>(); 778 string productUrl = string.Empty; 779 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts"); 780 bool applyRangeNameToProductNames = Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"); 781 string signInPage = Espresso.Page.Area.Item.GetValue<string>("SignUpPage"); 782 783 <div class="row"> 784 <div class="col-12 d-none d-md-block" id="js-dvp-product-premium-content-highlight"> 785 <script id="js-e-handlebars-tmpl-dvp-product-premium-content-highlight" type="text/x-handlebars-template"> 786 {{#if premiumPages.0.searchFriendlyImageBanner}} 787 <div class="js-dvp-product-premium-content-animate fade mb-2"> 788 <a href="javascript:void(0);" class="js-dvp-product-details-premium-content-highlight-banner-link"> 789 <img class="p-img" src="{{premiumPages.0.searchFriendlyImageBanner}}" alt="{{premiumPages.0.searchFriendlyTitle}}" /> 790 </a> 791 </div> 792 {{/if}} 793 </script> 794 </div> 795 </div> 796 797 if(productsInRangeCount > 1) 798 { 799 <div class="row e-product"> 800 <div class="col-12 col-md-6 mb-md-3 pr-sm-3"> 801 <h1 class="mb-1 font-weight-bold"> 802 @rangeNameSuperscripted 803 </h1> 804 @foreach(LoopItem product in range.GetLoop("ProductsInRange")) 805 { 806 807 groupId = product.GetString("Ecom:Group.ID"); 808 809 productName = product.GetString("Ecom:Product.Name"); 810 productNameJSON = productName.Replace("\"","&quot;"); 811 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 812 813 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 814 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 815 816 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 817 productDisplayNameSuperscripted = applyRangeNameToProductNames ? $"{displayNameSuperscripted} {productNameJSON}" : productNameJSON; 818 819 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-"); 820 821 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 822 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 823 824 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 825 826 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 827 828 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 829 830 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 831 productActivesJSON = WebUtility.HtmlDecode(Regex.Replace(productActives, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 832 833 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value"); 834 productStorageConditionJSON = WebUtility.HtmlDecode(Regex.Replace(productStorageCondition, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 835 836 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator")); 837 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value"); 838 839 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value"); 840 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 841 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value"); 842 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value"); 843 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value"); 844 845 hasDocuments = true; 846 847 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 848 { 849 hasDocuments = false; 850 } 851 852 853 productRewardButtonLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonLink.Value" ); 854 productRewardButtonLinkProcessed = productRewardButtonLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardButtonLink) : productRewardButtonLink; 855 productRewardButtonText = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonText.Value"); 856 showRewardButton = !string.IsNullOrEmpty( productRewardButtonLinkProcessed ) && !string.IsNullOrEmpty( productRewardButtonText ); 857 858 productRewardAdditionalLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardAdditionalLink.Value" ); 859 productRewardAdditionalLinkProcessed = productRewardAdditionalLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardAdditionalLink) : productRewardAdditionalLink; 860 showRewardAdditionalLink = !string.IsNullOrEmpty( productRewardAdditionalLinkProcessed ); 861 862 productShowFooterContent = product.GetBoolean("Ecom:Product.CategoryField.DechraPIMProducts.ShowProductFooter.Value"); 863 productFooterContent = productShowFooterContent ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductFooterContent.Value") : ""; 864 865 if ( !string.IsNullOrEmpty(productFooterContent) ) 866 { 867 string hrefPattern = @"href\s*=\s*(?:[""'](?<1>[^""']*)[""']|(?<1>[^>\s]+))"; 868 869 Match regexMatch = Regex.Match(productFooterContent, hrefPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled, TimeSpan.FromSeconds(1)); 870 871 while (regexMatch.Success) 872 { 873 string href = regexMatch.Groups[ 1 ].ToString(); 874 if ( href.ToLower().Contains("default.aspx?id=") ) 875 { 876 productFooterContent = productFooterContent.Replace(href, SearchEngineFriendlyURLs.GetFriendlyUrl(href.Replace("/",""))); 877 } 878 regexMatch = regexMatch.NextMatch(); 879 } 880 881 productFooterContentJSON = WebUtility.HtmlDecode(Regex.Replace(productFooterContent, @"\t|\n|\r", " ")); 882 } 883 else 884 { 885 productFooterContentJSON = ""; 886 } 887 888 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value"); 889 productDisclaimerJSON = WebUtility.HtmlDecode(Regex.Replace(productDisclaimer, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 890 891 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value"); 892 productShopInformationJSON = WebUtility.HtmlDecode(Regex.Replace(productShopInformation, @"\t|\n|\r", " ")).Replace("\"","'").Replace("<table>","<table class='table table-striped table-condensed'>"); 893 894 productUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}#{urlFriendlyProductName}"; 895 896 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 897 898 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 899 900 dynamic JSON = new { 901 Name = productDisplayName, 902 ShortDescription = productShortDescriptionJSON, 903 Image = productImage, 904 Images = images, 905 Actives = productActivesJSON, 906 StorageCondition = productStorageConditionJSON, 907 PackSize = productPackSize, 908 WithdrawalPeriod = productWithdrawalPeriod, 909 Datasheet = !string.IsNullOrEmpty(productDatasheet) ? showProductFileTypeDatasheet ? productDatasheet : "None" : "", 910 PackInsert = !string.IsNullOrEmpty(productPackInsert) ? showProductFileTypePackInsert ? productPackInsert : "None" : "", 911 SPC = !string.IsNullOrEmpty(productSPC) ? showProductFileTypeSPC ? productSPC : "None" : "", 912 MSDS = !string.IsNullOrEmpty(productMSDS) ? showProductFileTypeMSDS ? productMSDS : "None" : "", 913 ShowDatasheet = showProductFileTypeDatasheet, 914 ShowPackInsert = showProductFileTypePackInsert, 915 ShowSPC = showProductFileTypeSPC, 916 ShowMSDS = showProductFileTypeMSDS, 917 HasDocuments = hasDocuments, 918 Disclaimer = productDisclaimerJSON, 919 ShopInformation = productShopInformationJSON, 920 ShowRewardButton = showRewardButton, 921 RewardButtonLink = showRewardButton ? productRewardButtonLinkProcessed : "", 922 RewardButtonText = showRewardButton ? productRewardButtonText : "", 923 RewardAdditionalLink = showRewardAdditionalLink ? productRewardAdditionalLinkProcessed : "", 924 FooterContent = productFooterContentJSON 925 }; 926 927 <a class="js-dvp-product-list-details" href="@productUrl" title="@productDisplayName" data-productname="@urlFriendlyProductName"> 928 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span> 929 <div class="row px-sm-1 my-2 my-sm-0"> 930 <div class="dvp-product-list-details col-12 p-sm-1 py-1"> 931 <div class="row"> 932 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container"> 933 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=200&amp;Quality=75" alt="@productDisplayName"> 934 </div> 935 <div class="col-9 col-sm-8 px-sm-2 my-auto"> 936 <p class="mb-0"> 937 @if (applyRangeNameToProductNames) 938 { 939 <b>@productDisplayNameSuperscripted</b> 940 } 941 else 942 { 943 <b class="h3">@displayNameSuperscripted</b> 944 <br> 945 @productDisplayNameSuperscripted 946 } 947 </p> 948 </div> 949 <div class="col-2 d-none d-sm-block my-auto text-center"> 950 <i class="material-icons material-icons-4x">keyboard_arrow_right</i> 951 </div> 952 </div> 953 <script type="application/json" class="@urlFriendlyProductName"> 954 @JsonService.Instance.ToJson(JSON) 955 </script> 956 </div> 957 </div> 958 </a> 959 } 960 </div> 961 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-0 pb-4 pl-sm-3 dvp-product-details"> 962 <div class="js-dvp-product-details-animate fade"> 963 <div class="row"> 964 <div class="col-12"> 965 <div class="e-product-image-container dvp-product-details-image-container text-center"> 966 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="dvp-product-details-image" alt="@productDisplayName"> 967 </div> 968 </div> 969 </div> 970 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 971 { 972 <div class="row"> 973 <div class="col-12"> 974 @productShortDescriptionJSON 975 </div> 976 </div> 977 } 978 <div class="row"> 979 <div class="col-12 mt-2 table-responsive"> 980 <table class="table"> 981 @if(!string.IsNullOrEmpty(productActives)) 982 { 983 <tr> 984 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 985 <td>@productActives</td> 986 </tr> 987 } 988 @if(!string.IsNullOrEmpty(productPackSize)) 989 { 990 <tr> 991 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 992 <td>@productPackSize</td> 993 </tr> 994 } 995 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 996 { 997 <tr> 998 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 999 <td>@productWithdrawalPeriod</td> 1000 </tr> 1001 } 1002 @if(!string.IsNullOrEmpty(productStorageCondition)) 1003 { 1004 <tr> 1005 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 1006 <td>@productStorageCondition</td> 1007 </tr> 1008 } 1009 @if(hasDocuments) 1010 { 1011 <tr> 1012 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 1013 <td> 1014 @if(!string.IsNullOrEmpty(productDatasheet)) 1015 { 1016 if ( showProductFileTypeDatasheet ) 1017 { 1018 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet"> 1019 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i> 1020 </a> 1021 } 1022 else 1023 { 1024 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1025 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 1026 </a> 1027 } 1028 } 1029 @if(!string.IsNullOrEmpty(productPackInsert)) 1030 { 1031 if ( showProductFileTypePackInsert ) 1032 { 1033 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productPackInsert" data-tracking-type="Pack Insert" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productPackInsert"> 1034 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i> 1035 </a> 1036 } 1037 else 1038 { 1039 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1040 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 1041 </a> 1042 } 1043 } 1044 @if(!string.IsNullOrEmpty(productSPC)) 1045 { 1046 if ( showProductFileTypeSPC ) 1047 { 1048 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productSPC" data-tracking-type="SPC" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productSPC"> 1049 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i> 1050 </a> 1051 } 1052 else 1053 { 1054 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1055 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 1056 </a> 1057 } 1058 } 1059 @if(!string.IsNullOrEmpty(productMSDS)) 1060 { 1061 if ( showProductFileTypeMSDS ) 1062 { 1063 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productMSDS" data-tracking-type="MSDS" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productMSDS"> 1064 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i> 1065 </a> 1066 } 1067 else 1068 { 1069 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1070 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 1071 </a> 1072 } 1073 } 1074 </td> 1075 </tr> 1076 } 1077 </table> 1078 </div> 1079 </div> 1080 @if(!string.IsNullOrEmpty(productShopInformationJSON)) 1081 { 1082 <div class="row"> 1083 <div class="col-12"> 1084 <div class="table-responsive"> 1085 @productShopInformationJSON 1086 </div> 1087 </div> 1088 </div> 1089 } 1090 @if(!string.IsNullOrEmpty(productDisclaimer)) 1091 { 1092 <div class="row"> 1093 <div class="col-12"> 1094 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 1095 <small> 1096 @productDisclaimer 1097 </small> 1098 </div> 1099 </div> 1100 } 1101 @if ( showRewardButton ) 1102 { 1103 <div class="row"> 1104 <div class="col-12"> 1105 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3> 1106 </div> 1107 <div class="col-12"> 1108 <a href="@productRewardButtonLinkProcessed" target="_blank" class="btn btn-sm btn-primary text-uppercase mr-1 js-dvp-product-details-tracking-reward-button" data-tracking-range-name="@rangeName"> 1109 @productRewardButtonText 1110 </a> 1111 @if ( !hideRequestmoreinformation ) 1112 { 1113 <button class="btn btn-sm btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 1114 @Translate("Talk with a Dechra member","Talk with a Dechra member") 1115 </button> 1116 } 1117 @if ( showRewardAdditionalLink ) 1118 { 1119 <p class="mb-1 mt-1 small"> 1120 <a href="@productRewardAdditionalLinkProcessed" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName"> 1121 @Translate("Not a Dechra Rewards Member? Click here", "Not a Dechra Rewards Member? Click here") 1122 </a> 1123 </p> 1124 } 1125 </div> 1126 </div> 1127 } 1128 else 1129 { 1130 if ( !hideRequestmoreinformation ) 1131 { 1132 <div class="row"> 1133 <div class="col-12"> 1134 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 1135 @Translate( "Request more information", "Request more information" ) 1136 </button> 1137 </div> 1138 </div> 1139 } 1140 } 1141 </div> 1142 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template"> 1143 <div class="js-dvp-product-details-animate fade"> 1144 <div class="e-product-image-container multi-range"> 1145 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 1146 <div class="carousel-inner{{#if Images}} carousel-multiple-images{{/if}}"> 1147 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 1148 <img src="/admin/public/getimage.ashx?Crop=0&Image={{Image}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="{{Name}}" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0"> 1149 </div> 1150 {{#each Images}} 1151 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 1152 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image={{this}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="{{../Name}} - {{math @@index "+" 1}}" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="{{math @@index "+" 1}}"> 1153 </div> 1154 {{/each}} 1155 </div> 1156 {{#if Images}} 1157 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a> 1158 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a> 1159 <ol class="carousel-indicators"> 1160 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 1161 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{Image}}&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span> 1162 </li> 1163 {{#each Images}} 1164 <li data-target="#js-e-product-image-carousel" data-slide-to="{{math @@index "+" 1}}"> 1165 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{this}}&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span> 1166 </li> 1167 {{/each}} 1168 </ol> 1169 {{/if}} 1170 </div> 1171 </div> 1172 {{#if ShortDescription}} 1173 <div class="dvp-short-description"> 1174 {{{ShortDescription}}} 1175 </div> 1176 {{/if}} 1177 <div class="row"> 1178 <div class="col-12 mt-2 table-responsive"> 1179 <table class="table"> 1180 {{#if Actives}} 1181 <tr> 1182 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 1183 <td>{{{Actives}}}</td> 1184 </tr> 1185 {{/if}} 1186 {{#if PackSize}} 1187 <tr> 1188 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 1189 <td>{{PackSize}}</td> 1190 </tr> 1191 {{/if}} 1192 {{#if WithdrawalPeriod}} 1193 <tr> 1194 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 1195 <td>{{{WithdrawalPeriod}}}</td> 1196 </tr> 1197 {{/if}} 1198 {{#if StorageCondition}} 1199 <tr> 1200 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 1201 <td>{{{StorageCondition}}}</td> 1202 </tr> 1203 {{/if}} 1204 {{#if HasDocuments}} 1205 <tr> 1206 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 1207 <td> 1208 {{#if Datasheet}} 1209 {{#if ShowDatasheet}} 1210 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{Datasheet}}" data-tracking-type="Datasheet" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{Datasheet}}"> 1211 @Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i> 1212 </a> 1213 {{else}} 1214 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1215 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 1216 </a> 1217 {{/if}} 1218 {{/if}} 1219 {{#if PackInsert}} 1220 {{#if ShowPackInsert}} 1221 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{PackInsert}}" data-tracking-type="Pack Insert" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{PackInsert}}"> 1222 @Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i> 1223 </a> 1224 {{else}} 1225 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1226 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 1227 </a> 1228 {{/if}} 1229 {{/if}} 1230 {{#if SPC}} 1231 {{#if ShowSPC}} 1232 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{SPC}}" data-tracking-type="SPC" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{SPC}}"> 1233 @Translate("SPC","SPC") <i class="material-icons">get_app</i> 1234 </a> 1235 {{else}} 1236 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1237 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 1238 </a> 1239 {{/if}} 1240 {{/if}} 1241 {{#if MSDS}} 1242 {{#if ShowMSDS}} 1243 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{MSDS}}" data-tracking-type="MSDS" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{MSDS}}"> 1244 @Translate("MSDS","MSDS") <i class="material-icons">get_app</i> 1245 </a> 1246 {{else}} 1247 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1248 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 1249 </a> 1250 {{/if}} 1251 {{/if}} 1252 </td> 1253 </tr> 1254 {{/if}} 1255 </table> 1256 </div> 1257 </div> 1258 {{#if ShopInformation}} 1259 <div class="row mt-1"> 1260 <div class="col-12"> 1261 <div class="table-responsive"> 1262 {{{ShopInformation}}} 1263 </div> 1264 </div> 1265 </div> 1266 {{/if}} 1267 {{#if Disclaimer}} 1268 <div class="row mt-1"> 1269 <div class="col-12"> 1270 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 1271 <small> 1272 {{{Disclaimer}}} 1273 </small> 1274 </div> 1275 </div> 1276 {{/if}} 1277 {{#if ShowRewardButton}} 1278 <div class="row"> 1279 <div class="col-12"> 1280 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3> 1281 </div> 1282 <div class="col-12"> 1283 <a href="{{{RewardButtonLink}}}" target="_blank" class="btn btn-sm btn-primary text-uppercase mr-1 js-dvp-product-details-tracking-reward-button" data-tracking-range-name="@rangeName"> 1284 {{RewardButtonText}} 1285 </a> 1286 @if ( !hideRequestmoreinformation ) 1287 { 1288 <button class="btn btn-sm btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 1289 @Translate("Talk with a Dechra member","Talk with a Dechra member") 1290 </button> 1291 } 1292 {{#if RewardAdditionalLink}} 1293 <p class="mb-1 mt-1 small"> 1294 <a href="{{RewardAdditionalLink}}" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName"> 1295 @Translate("Not a Dechra Rewards Member? Click here","Not a Dechra Rewards Member? Click here") 1296 </a> 1297 </p> 1298 {{/if}} 1299 </div> 1300 </div> 1301 {{else}} 1302 @if ( !hideRequestmoreinformation ) 1303 { 1304 <div class="row"> 1305 <div class="col-12"> 1306 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 1307 @Translate( "Request more information", "Request more information" ) 1308 </button> 1309 </div> 1310 </div> 1311 } 1312 {{/if}} 1313 </div> 1314 {{#if FeedingGuideImage}} 1315 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2"> 1316 <div class="row"> 1317 <div class="col-12 col-md-4"> 1318 <div class="e-product-section-header"> 1319 <h2 class="mb-1 mb-md-0">@Translate( "Feeding guide", "Feeding guide" )</h2> 1320 </div> 1321 </div> 1322 <div class="col-12 col-md-8"> 1323 <img src="{{FeedingGuideImage}}" class="p-img"/> 1324 </div> 1325 </div> 1326 </div> 1327 {{/if}} 1328 {{#if NutrientTableImage}} 1329 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2"> 1330 <div class="row"> 1331 <div class="col-12 col-md-4"> 1332 <div class="e-product-section-header"> 1333 <h2 class="mb-1 mb-md-0">@Translate( "Nutrient table","Nutrient table")</h2> 1334 </div> 1335 </div> 1336 <div class="col-12 col-md-8"> 1337 <img src="{{NutrientTableImage}}" class="p-img"/> 1338 </div> 1339 </div> 1340 </div> 1341 {{/if}} 1342 </script> 1343 </div> 1344 </div> 1345 } 1346 else 1347 { 1348 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 1349 { 1350 1351 groupId = product.GetString("Ecom:Group.ID"); 1352 1353 productName = product.GetString("Ecom:Product.Name"); 1354 productNameJSON = productName.Replace("\"","&quot;"); 1355 1356 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 1357 1358 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 1359 1360 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 1361 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 1362 1363 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 1364 1365 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 1366 1367 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 1368 1369 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 1370 1371 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 1372 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value"); 1373 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ");; 1374 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value"); 1375 1376 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value"); 1377 1378 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 1379 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value"); 1380 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value"); 1381 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value"); 1382 1383 hasDocuments = true; 1384 1385 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 1386 { 1387 hasDocuments = false; 1388 } 1389 1390 productRewardButtonLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonLink.Value"); 1391 productRewardButtonLinkProcessed = productRewardButtonLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardButtonLink) : productRewardButtonLink; 1392 productRewardButtonText = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonText.Value"); 1393 showRewardButton = !string.IsNullOrEmpty( productRewardButtonLinkProcessed ) && !string.IsNullOrEmpty(productRewardButtonText); 1394 1395 productRewardAdditionalLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardAdditionalLink.Value" ); 1396 productRewardAdditionalLinkProcessed = productRewardAdditionalLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardAdditionalLink) : productRewardAdditionalLink; 1397 showRewardAdditionalLink = !string.IsNullOrEmpty( productRewardAdditionalLinkProcessed ); 1398 1399 productShowFooterContent = product.GetBoolean("Ecom:Product.CategoryField.DechraPIMProducts.ShowProductFooter.Value"); 1400 productFooterContent = productShowFooterContent ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductFooterContent.Value") : ""; 1401 1402 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value"); 1403 1404 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value").Replace("<table>","<table class='table table-striped table-condensed'>"); 1405 1406 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 1407 1408 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 1409 1410 } 1411 <div class="row e-product dvp-product-details"> 1412 <div class="col-12"> 1413 <div class="row"> 1414 <div class="col-12"> 1415 <h1 class="mb-1 font-weight-bold"> 1416 @rangeNameSuperscripted 1417 </h1> 1418 </div> 1419 </div> 1420 </div> 1421 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4"> 1422 <div class="row"> 1423 <div class="col-12"> 1424 <div class="e-product-image-container single-range"> 1425 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 1426 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")"> 1427 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 1428 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@productDisplayName" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0"> 1429 </div> 1430 1431 @for(int i = 0; i < images.Count(); i++) 1432 { 1433 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 1434 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@images[i]&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@productDisplayName" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="@(i + 1)"> 1435 </div> 1436 } 1437 </div> 1438 @if(images.Any()) 1439 { 1440 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a> 1441 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a> 1442 <ol class="carousel-indicators"> 1443 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 1444 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span> 1445 </li> 1446 @for(int i = 0; i < images.Count(); i++) 1447 { 1448 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)"> 1449 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@images[i]&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span> 1450 </li> 1451 } 1452 </ol> 1453 } 1454 </div> 1455 </div> 1456 </div> 1457 </div> 1458 </div> 1459 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3"> 1460 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span> 1461 @if(!string.IsNullOrEmpty(optionalName)) 1462 { 1463 <div class="row"> 1464 <div class="col-12"> 1465 <h2 class="mb-0">@displayNameSuperscripted</h2> 1466 </div> 1467 </div> 1468 } 1469 @if(!string.IsNullOrEmpty(productShortDescription)) 1470 { 1471 <div class="row"> 1472 <div class="col-12"> 1473 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")) 1474 </div> 1475 </div> 1476 } 1477 <div class="row"> 1478 <div class="col-12 mt-2 table-responsive"> 1479 <table class="table"> 1480 @if(!string.IsNullOrEmpty(productActives)) 1481 { 1482 <tr> 1483 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 1484 <td>@productActives</td> 1485 </tr> 1486 } 1487 @if(!string.IsNullOrEmpty(productPackSize)) 1488 { 1489 <tr> 1490 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 1491 <td>@productPackSize</td> 1492 </tr> 1493 } 1494 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 1495 { 1496 <tr> 1497 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 1498 <td>@productWithdrawalPeriod</td> 1499 </tr> 1500 } 1501 @if(!string.IsNullOrEmpty(productStorageCondition)) 1502 { 1503 <tr> 1504 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 1505 <td>@productStorageCondition</td> 1506 </tr> 1507 } 1508 @if(hasDocuments) 1509 { 1510 <tr> 1511 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 1512 <td> 1513 @if(!string.IsNullOrEmpty(productDatasheet)) 1514 { 1515 if ( showProductFileTypeDatasheet ) 1516 { 1517 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet"> 1518 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i> 1519 </a> 1520 } 1521 else 1522 { 1523 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1524 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 1525 </a> 1526 } 1527 } 1528 @if(!string.IsNullOrEmpty(productPackInsert)) 1529 { 1530 if ( showProductFileTypePackInsert ) 1531 { 1532 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productPackInsert" data-tracking-type="Pack Insert" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productPackInsert"> 1533 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i> 1534 </a> 1535 } 1536 else 1537 { 1538 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1539 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 1540 </a> 1541 } 1542 } 1543 @if(!string.IsNullOrEmpty(productSPC)) 1544 { 1545 if ( showProductFileTypeSPC ) 1546 { 1547 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productSPC" data-tracking-type="SPC" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productSPC"> 1548 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i> 1549 </a> 1550 } 1551 else 1552 { 1553 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1554 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 1555 </a> 1556 } 1557 } 1558 @if(!string.IsNullOrEmpty(productMSDS)) 1559 { 1560 if ( showProductFileTypeMSDS ) 1561 { 1562 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productMSDS" data-tracking-type="MSDS" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productMSDS"> 1563 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i> 1564 </a> 1565 } 1566 else 1567 { 1568 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1569 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 1570 </a> 1571 } 1572 } 1573 </td> 1574 </tr> 1575 } 1576 </table> 1577 </div> 1578 </div> 1579 @if(!string.IsNullOrEmpty(productShopInformation)) 1580 { 1581 <div class="row mt-1"> 1582 <div class="col-12"> 1583 <div class="table-responsive"> 1584 @productShopInformation 1585 </div> 1586 </div> 1587 </div> 1588 } 1589 @if(!string.IsNullOrEmpty(productDisclaimer)) 1590 { 1591 <div class="row mt-1"> 1592 <div class="col-12"> 1593 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 1594 <small> 1595 @productDisclaimer 1596 </small> 1597 </div> 1598 </div> 1599 } 1600 @if ( showRewardButton ) 1601 { 1602 <div class="row"> 1603 <div class="col-12"> 1604 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3> 1605 </div> 1606 <div class="col-12"> 1607 <a href="@productRewardButtonLinkProcessed" target="_blank" class="btn btn-sm btn-primary text-uppercase mr-1 js-dvp-product-details-tracking-reward-button" data-tracking-range-name="@rangeName"> 1608 @productRewardButtonText 1609 </a> 1610 @if ( !hideRequestmoreinformation ) 1611 { 1612 <button class="btn btn-sm btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 1613 @Translate("Talk with a Dechra member","Talk with a Dechra member") 1614 </button> 1615 } 1616 @if ( showRewardAdditionalLink ) 1617 { 1618 <p class="mb-1 mt-1 small"> 1619 <a href="@productRewardAdditionalLinkProcessed" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName"> 1620 @Translate("Not a Dechra Rewards Member? Click here", "Not a Dechra Rewards Member? Click here") 1621 </a> 1622 </p> 1623 } 1624 </div> 1625 </div> 1626 } 1627 else 1628 { 1629 if ( !hideRequestmoreinformation ) 1630 { 1631 <div class="row"> 1632 <div class="col-12"> 1633 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 1634 @Translate( "Request more information", "Request more information" ) 1635 </button> 1636 </div> 1637 </div> 1638 } 1639 } 1640 </div> 1641 </div> 1642 } 1643 1644 int productPanelsItemId = 0; 1645 1646 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId)) 1647 { 1648 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId); 1649 1650 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId"> 1651 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations) 1652 { 1653 string productPanelNameValue = productPanel.GetValue<string>("Name"); 1654 1655 if(productPanelNameValue == "Premium Content") 1656 { 1657 <div class="col-12" id="js-dvp-product-premium-content"> 1658 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1659 <div class="row"> 1660 <div class="col-12 is-loading"> 1661 <div class="e-loading-spinner"></div> 1662 </div> 1663 </div> 1664 </div> 1665 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template"> 1666 <div class="js-dvp-product-premium-content-animate fade"> 1667 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1668 <div class="row"> 1669 <div class="col-12 col-md-4"> 1670 <div class="e-product-section-header"> 1671 <h2 class="mb-1 mb-md-0"> 1672 @Translate("Premium Content","Premium Content") 1673 </h2> 1674 </div> 1675 </div> 1676 <div class="col-12 col-md-8 mt-half"> 1677 {{#each premiumPages}} 1678 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 1679 <div class="col-12 col-md-6"> 1680 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 1681 </div> 1682 <div class="col-12 col-md-6"> 1683 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 1684 <p>{{searchFriendlyDescription}}</p> 1685 <p> 1686 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}"> 1687 {{searchFriendlyButtonText}} 1688 </a> 1689 </p> 1690 </div> 1691 </div> 1692 {{/each}} 1693 </div> 1694 </div> 1695 </div> 1696 </div> 1697 </script> 1698 </div> 1699 } 1700 else if(productPanelNameValue == "Supportmaterials for vets") 1701 { 1702 <div class="col-12" id="js-dvp-product-supportmaterials-vets"> 1703 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1704 <div class="row"> 1705 <div class="col-12 is-loading"> 1706 <div class="e-loading-spinner"></div> 1707 </div> 1708 </div> 1709 </div> 1710 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template"> 1711 <div class="js-dvp-product-supportmaterials-vets-animate fade"> 1712 {{#if vetSupportmaterials.items}} 1713 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1714 <div class="row"> 1715 {{#if vetSupportmaterials.display}} 1716 <div class="col-12 col-md-4"> 1717 <div class="e-product-section-header"> 1718 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2> 1719 </div> 1720 </div> 1721 <div class="col-12 col-md-8 mt-half"> 1722 {{#each vetSupportmaterials.items}} 1723 1724 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-vet-supportmaterials-{{categoryId}}"> 1725 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 1726 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 1727 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 1728 </p> 1729 1730 <div class="row"> 1731 <div class="col-12"> 1732 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}"> 1733 <div class="row"> 1734 <div class="col-12 pl-md-3"> 1735 <div class="row"> 1736 {{#each materials}} 1737 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 1738 <div class="row"> 1739 <div class="col-12 col-md-6 text-center"> 1740 {{#if download}} 1741 {{#if loginToDownload}} 1742 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 1743 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1744 </a> 1745 {{else}} 1746 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 1747 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1748 </a> 1749 {{/if}} 1750 {{else}} 1751 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1752 {{/if}} 1753 </div> 1754 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 1755 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 1756 1757 {{#if loginToDownload}} 1758 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 1759 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download") 1760 </a> 1761 {{else}} 1762 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 1763 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 1764 </a> 1765 {{/if}} 1766 1767 @if(shopIsActive && hasAccess) 1768 { 1769 @:{{#if orderable}} 1770 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 1771 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 1772 <input type="hidden" name="CartCmd" value="Add"> 1773 <input type="hidden" name="ProductID" value="{{id}}"> 1774 <input type="hidden" name="VariantID" value=""> 1775 <input type="hidden" name="UnitID" value=""> 1776 <input type="hidden" name="Redirect" value="false"> 1777 <input type="hidden" name="Quantity" value="1"> 1778 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 1779 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 1780 </form> 1781 @:{{/if}} 1782 } 1783 </div> 1784 </div> 1785 </div> 1786 {{/each}} 1787 </div> 1788 </div> 1789 </div> 1790 </div> 1791 </div> 1792 </div> 1793 {{/each}} 1794 </div> 1795 {{else}} 1796 <div class="col-12 text-center"> 1797 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for vets are intended for healthcare professionals only.","These support materials for vets are intended for healthcare professionals only.")</p> 1798 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 1799 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 1800 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 1801 </div> 1802 {{/if}} 1803 </div> 1804 </div> 1805 {{/if}} 1806 </div> 1807 </script> 1808 1809 </div> 1810 } 1811 else if(productPanelNameValue == "Supportmaterials for pet owners") 1812 { 1813 <div class="col-12" id="js-dvp-product-supportmaterials-clients"> 1814 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1815 <div class="row"> 1816 <div class="col-12 is-loading"> 1817 <div class="e-loading-spinner"></div> 1818 </div> 1819 </div> 1820 </div> 1821 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template"> 1822 <div class="js-dvp-product-supportmaterials-clients-animate fade"> 1823 {{#if clientSupportmaterials.items}} 1824 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1825 <div class="row"> 1826 {{#if clientSupportmaterials.display}} 1827 <div class="col-12 col-md-4"> 1828 <div class="e-product-section-header"> 1829 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2> 1830 </div> 1831 </div> 1832 <div class="col-12 col-md-8 mt-half"> 1833 {{#each clientSupportmaterials.items}} 1834 1835 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-client-supportmaterials-{{categoryId}}"> 1836 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 1837 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 1838 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 1839 </p> 1840 1841 <div class="row"> 1842 <div class="col-12"> 1843 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}"> 1844 <div class="row"> 1845 <div class="col-12 pl-md-3"> 1846 <div class="row"> 1847 {{#each materials}} 1848 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 1849 <div class="row"> 1850 <div class="col-12 col-md-6 text-center"> 1851 {{#if download}} 1852 {{#if loginToDownload}} 1853 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 1854 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1855 </a> 1856 {{else}} 1857 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 1858 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1859 </a> 1860 {{/if}} 1861 {{else}} 1862 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1863 {{/if}} 1864 </div> 1865 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 1866 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 1867 {{#if download}} 1868 <p class="mb-1"> 1869 {{#if loginToDownload}} 1870 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")</a> 1871 {{else}} 1872 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 1873 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 1874 </a> 1875 {{/if}} 1876 </p> 1877 {{/if}} 1878 1879 @if(shopIsActive && hasAccess) 1880 { 1881 @:{{#if orderable}} 1882 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 1883 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 1884 <input type="hidden" name="CartCmd" value="Add"> 1885 <input type="hidden" name="ProductID" value="{{id}}"> 1886 <input type="hidden" name="VariantID" value=""> 1887 <input type="hidden" name="UnitID" value=""> 1888 <input type="hidden" name="Redirect" value="false"> 1889 <input type="hidden" name="Quantity" value="1"> 1890 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 1891 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 1892 </form> 1893 @:{{/if}} 1894 } 1895 1896 </div> 1897 </div> 1898 </div> 1899 {{/each}} 1900 </div> 1901 </div> 1902 </div> 1903 </div> 1904 </div> 1905 </div> 1906 {{/each}} 1907 </div> 1908 {{else}} 1909 <div class="col-12 text-center"> 1910 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for petowners are intended for healthcare professionals only.","These support materials for petowners are intended for healthcare professionals only.")</p> 1911 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 1912 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 1913 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 1914 </div> 1915 {{/if}} 1916 </div> 1917 </div> 1918 {{/if}} 1919 </div> 1920 </script> 1921 1922 </div> 1923 } 1924 else if(productPanelNameValue == "Videos") 1925 { 1926 <div class="col-12" id="js-dvp-product-videos"> 1927 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1928 <div class="row"> 1929 <div class="col-12 is-loading"> 1930 <div class="e-loading-spinner"></div> 1931 </div> 1932 </div> 1933 </div> 1934 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template"> 1935 <div class="js-dvp-product-videos-animate fade"> 1936 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1937 <div class="row"> 1938 {{#if display}} 1939 <div class="col-12 col-md-4"> 1940 <div class="e-product-section-header"> 1941 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2> 1942 </div> 1943 </div> 1944 <div class="col-12 col-md-8 mt-half"> 1945 {{#compare totalVideoCount '>' 4}} 1946 <div class="collapse-peek"> 1947 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos"> 1948 {{/compare}} 1949 <div class="row"> 1950 {{#each videos}} 1951 {{#each videos}} 1952 <div class="col-12 col-md-6"> 1953 <a href="javascript:void(0);" title="{{embedTitle}}" class="js-dvp-video-modal js-dvp-product-details-tracking-video-popup" data-tracking-title="{{embedTitle}}" data-tracking-range-name="@rangeName" data-tracking-url="{{{embedUrl}}}"> 1954 <div> 1955 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" /> 1956 <p class="text-center mt-1 mb-3">{{embedTitle}}</p> 1957 </div> 1958 </a> 1959 <sc{{handlebarHack}}ript type="application/json"> 1960 { 1961 "url":"{{../url}}", 1962 "header":"{{embedTitle}}", 1963 "embedUrl":"{{{embedUrl}}}" 1964 } 1965 </sc{{handlebarHack}}ript> 1966 </div> 1967 {{/each}} 1968 {{/each}} 1969 </div> 1970 {{#compare totalVideoCount '>' 4}} 1971 </div> 1972 <div class="collapse-peek-toggle"> 1973 <div class="row"> 1974 <div class="col-12 mx-auto text-center"> 1975 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos"> 1976 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span> 1977 </a> 1978 </div> 1979 </div> 1980 </div> 1981 {{/compare}} 1982 </div> 1983 </div> 1984 {{else}} 1985 <div class="col-12 text-center"> 1986 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related videos","Please sign in to access our related videos")</p> 1987 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p> 1988 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 1989 </div> 1990 {{/if}} 1991 </div> 1992 </div> 1993 </div> 1994 </script> 1995 </div> 1996 } 1997 else if(productPanelNameValue == "Related ranges") 1998 { 1999 <div class="col-12"> 2000 @if( GetLoop("RelatedRanges").Count() > 0 ) 2001 { 2002 string relatedProductsHeader = Translate("Other related products","Other related products"); 2003 2004 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value"))) 2005 { 2006 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value"); 2007 } 2008 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2009 <div class="row"> 2010 <div class="col-12 col-md-4"> 2011 <div class="e-product-section-header"> 2012 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2> 2013 </div> 2014 </div> 2015 <div class="col-12 col-md-8 mt-half dvp-ranges-list"> 2016 <div class="row"> 2017 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges")) 2018 { 2019 string relatedRangeGroupId = ""; 2020 2021 int relatedProductInt = 0; 2022 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count(); 2023 string relatedRangeName = relatedRange.GetString("Range"); 2024 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>"); 2025 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-"); 2026 2027 <div class="col-12 col-lg-6 mb-3"> 2028 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")"> 2029 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3> 2030 </div> 2031 <div class="col-12 px-1 pt-1 border dvp-range"> 2032 <div> 2033 <div class="row"> 2034 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange")) 2035 { 2036 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId; 2037 2038 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage"); 2039 2040 if(relatedProductInt == 2) 2041 { 2042 @:</div> 2043 @:</div> 2044 @:<div class="collapse" id="range-@relatedRangeNameCleaned"> 2045 @:<div class="row"> 2046 } 2047 2048 string relatedUrl = string.Empty; 2049 2050 string relatedUrlFriendlyProduct = string.Empty; 2051 2052 string relatedProductName = product.GetString("Ecom:Product.Name"); 2053 2054 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName"); 2055 2056 string relatedProductDisplayName = relatedProductName; 2057 string relatedProductTitleName = relatedProductName; 2058 2059 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 2060 { 2061 if(hideRelatedProductName) 2062 { 2063 relatedProductDisplayName = relatedRangeNameSuperscripted; 2064 relatedProductTitleName = relatedRangeName; 2065 } 2066 else 2067 { 2068 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName; 2069 relatedProductTitleName = relatedRangeName + " " + relatedProductName; 2070 } 2071 } 2072 2073 if(product.GetBoolean("Ecom:Product:Field.IsDiets")) 2074 { 2075 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 2076 } 2077 else 2078 { 2079 relatedUrl = relatedProductName; 2080 } 2081 2082 if(relatedProductsInRangeCount > 1) 2083 { 2084 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-"); 2085 } 2086 2087 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 2088 2089 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct; 2090 2091 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center"> 2092 <a href="@relatedProductUrl" title="@relatedProductTitleName"> 2093 <div class="row"> 2094 <div class="col-12 dvp-image-container"> 2095 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@relatedProductImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@relatedProductTitleName"> 2096 </div> 2097 <div class="col-12"> 2098 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p> 2099 </div> 2100 </div> 2101 </a> 2102 </div> 2103 2104 relatedProductInt++; 2105 } 2106 </div> 2107 </div> 2108 <div class="row mt-1 dvp-view-more-products"> 2109 @if(relatedProductsInRangeCount > 2) 2110 { 2111 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2; 2112 2113 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products"); 2114 2115 if(relatedProductsInRangeCount == 3 ) 2116 { 2117 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product"); 2118 } 2119 2120 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString()); 2121 2122 <div class="col-12"> 2123 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more"> 2124 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@relatedRangeNameCleaned" aria-expanded="false" aria-controls="range-@relatedRangeNameCleaned" href="javascript:void(0);"> 2125 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span> 2126 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span> 2127 </a> 2128 </p> 2129 </div> 2130 } 2131 </div> 2132 </div> 2133 </div> 2134 } 2135 </div> 2136 </div> 2137 </div> 2138 </div> 2139 } 2140 </div> 2141 } 2142 else if(productPanelNameValue == "Newsletter") 2143 { 2144 <div class="col-12"> 2145 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2146 <div class="row"> 2147 <div class="col-12 col-md-4"> 2148 <div class="e-product-section-header"> 2149 <h2 class="mb-1 mb-md-0">Newsletter</h2> 2150 </div> 2151 </div> 2152 <div class="col-12 col-md-8"> 2153 <div class="dvp-newsletter-signup-form"> 2154 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide"> 2155 <div class="form-group"> 2156 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label> 2157 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter"> 2158 </div> 2159 <div class="form-group"> 2160 <button type="submit" class="btn btn-primary">Sign up</button> 2161 </div> 2162 </form> 2163 </div> 2164 </div> 2165 </div> 2166 </div> 2167 </div> 2168 } 2169 else if(productPanelNameValue == "eLearning") 2170 { 2171 <div class="col-12" id="js-dvp-product-elearning"> 2172 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2173 <div class="row"> 2174 <div class="col-12 is-loading"> 2175 <div class="e-loading-spinner"></div> 2176 </div> 2177 </div> 2178 </div> 2179 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template"> 2180 <div class="js-dvp-product-elearning-animate fade"> 2181 {{#if elearning.items}} 2182 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2183 <div class="row"> 2184 <div class="col-12 col-md-4"> 2185 <div class="e-product-section-header"> 2186 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2> 2187 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" /> 2188 </div> 2189 </div> 2190 <div class="col-12 col-md-8"> 2191 <h3> 2192 {{elearning.items.0.courseAmountText}} 2193 </h3> 2194 <div class="row"> 2195 <div class="col-12"> 2196 <div class="list-group"> 2197 {{#if elearning.display}} 2198 {{#each elearning.items.0.courses}} 2199 <a class="px-2 list-group-item list-group-item-action js-dvp-product-details-tracking-elearning-click" href="{{url}}" target="_blank" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 2200 <b>{{name}}</b> 2201 </a> 2202 {{/each}} 2203 {{else}} 2204 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p> 2205 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 2206 {{/if}} 2207 </div> 2208 </div> 2209 </div> 2210 {{#unless elearning.display}} 2211 <div class="row mt-2"> 2212 <div class="col-12"> 2213 <div class="bg-academy"> 2214 <div class="row p-2"> 2215 @{ 2216 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString(); 2217 } 2218 <div class="col-12"> 2219 <h3 class="text-white mb-1">@Translate("Don't have an account on our free eLearning platform for vets?","Don't have an account on our free eLearning platform for vets?")</h3> 2220 </div> 2221 <div class="col-12 col-md-8 text-white"> 2222 <ul class="mb-0"> 2223 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li> 2224 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li> 2225 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li> 2226 </ul> 2227 </div> 2228 <div class="col-12 col-md-4 pt-2"> 2229 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p> 2230 </div> 2231 </div> 2232 </div> 2233 </div> 2234 </div> 2235 {{/unless}} 2236 </div> 2237 </div> 2238 </div> 2239 {{/if}} 2240 </div> 2241 </script> 2242 </div> 2243 } 2244 else if(productPanelNameValue == "Product Websites") 2245 { 2246 <div class="col-12" id="js-dvp-product-websites"> 2247 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2248 <div class="row"> 2249 <div class="col-12 is-loading"> 2250 <div class="e-loading-spinner"></div> 2251 </div> 2252 </div> 2253 </div> 2254 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template"> 2255 <div class="js-dvp-product-websites-animate fade"> 2256 {{#if websites.items}} 2257 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2258 <div class="row"> 2259 {{#if websites.display}} 2260 <div class="col-12 col-md-4"> 2261 <div class="e-product-section-header"> 2262 <h2 class="mb-1 mb-md-0"> 2263 {{#compare count '>' 1}} 2264 @Translate("Product Websites","Product Websites") 2265 {{else}} 2266 @Translate("Product Website","Product Website") 2267 {{/compare}} 2268 </h2> 2269 </div> 2270 </div> 2271 <div class="col-12 col-md-8 mt-half"> 2272 {{#each websites.items.0.website}} 2273 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 2274 <div class="col-12 col-md-6"> 2275 <p class="lead"> 2276 {{name}} 2277 </p> 2278 <p> 2279 <a class="btn btn-primary js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 2280 @Translate("Go to website","Go to website") 2281 </a> 2282 </p> 2283 </div> 2284 <div class="col-12 col-md-6"> 2285 <a class="js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 2286 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" /> 2287 </a> 2288 </div> 2289 </div> 2290 {{/each}} 2291 </div> 2292 {{else}} 2293 <div class="col-12 text-center"> 2294 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our product websites","Please sign in to access our product websites")</p> 2295 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p> 2296 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 2297 </div> 2298 {{/if}} 2299 </div> 2300 </div> 2301 {{/if}} 2302 </div> 2303 </script> 2304 </div> 2305 } 2306 else if(productPanelNameValue == "Previous Premium Content") 2307 { 2308 <div class="col-12" id="js-dvp-product-previous-premium-content"> 2309 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2310 <div class="row"> 2311 <div class="col-12 is-loading"> 2312 <div class="e-loading-spinner"></div> 2313 </div> 2314 </div> 2315 </div> 2316 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template"> 2317 <div class="js-dvp-product-previous-premium-content-animate fade"> 2318 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2319 <div class="row"> 2320 <div class="col-12 col-md-4"> 2321 <div class="e-product-section-header"> 2322 <h2 class="mb-1 mb-md-0"> 2323 @Translate("Previous Premium Content","Premium Content") 2324 </h2> 2325 </div> 2326 </div> 2327 <div class="col-12 col-md-8 mt-half"> 2328 {{#each premiumPages}} 2329 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 2330 <div class="col-12 col-md-6"> 2331 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 2332 </div> 2333 <div class="col-12 col-md-6"> 2334 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 2335 <p>{{searchFriendlyDescription}}</p> 2336 <p> 2337 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}"> 2338 {{searchFriendlyButtonText}} 2339 </a> 2340 </p> 2341 </div> 2342 </div> 2343 {{/each}} 2344 </div> 2345 </div> 2346 </div> 2347 </div> 2348 </script> 2349 </div> 2350 } 2351 else if(productPanelNameValue == "Frequent Treatment Questions") 2352 { 2353 <div class="col-12" id="js-dvp-product-faq"> 2354 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2355 <div class="row"> 2356 <div class="col-12 is-loading"> 2357 <div class="e-loading-spinner"></div> 2358 </div> 2359 </div> 2360 </div> 2361 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template"> 2362 <div class="js-dvp-product-faq-animate fade"> 2363 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2364 <div class="row"> 2365 {{#if display}} 2366 <div class="col-12 col-md-4"> 2367 <div class="e-product-section-header"> 2368 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2> 2369 </div> 2370 </div> 2371 <div class="col-12 col-md-8 mt-half dvp-faq"> 2372 {{# faqs}} 2373 {{#each faq}} 2374 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}"> 2375 <div class="row"> 2376 <div class="col-12"> 2377 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}"> 2378 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 2379 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 2380 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small> 2381 </h3> 2382 </div> 2383 </div> 2384 <div class="row"> 2385 <div class="col-12"> 2386 <div class="collapse" id="collapse-{{paragraphId}}"> 2387 <div class="row"> 2388 <div class="col-12 pl-3"> 2389 {{#each faqList}} 2390 <div class="row"> 2391 <div class="col-12 mt-1"> 2392 <a href="javascript:void(0);" class="js-dvp-faq-modal js-dvp-product-details-tracking-faq-popup" data-tracking-title="{{listHeader}}" data-tracking-category-name="{{../categoryName}}" data-tracking-range-name="@rangeName" data-tracking-url="{{../../url}}"> 2393 {{listHeader}} 2394 </a> 2395 <sc{{handlebarHack}}ript type="application/json"> 2396 { 2397 "url":"{{../../url}}", 2398 "categoryName": "{{../categoryName}}", 2399 "header":"{{listHeader}}", 2400 "content":"{{{listContent}}}" 2401 } 2402 </sc{{handlebarHack}}ript> 2403 </div> 2404 </div> 2405 {{/each}} 2406 </div> 2407 </div> 2408 </div> 2409 </div> 2410 </div> 2411 </div> 2412 {{/each}} 2413 {{/faqs}} 2414 2415 {{#each accordions}} 2416 <div class="p col-12 p-accordion" id="{{paragraphID}}"> 2417 {{#if introText}} 2418 <div class="p-accordion-lead"> 2419 {{{introText}}} 2420 </div> 2421 {{/if}} 2422 <div class="p-accordion-container "> 2423 {{#each accordionItems}} 2424 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 "> 2425 <div class="p-accordion-toggle"> 2426 <p data-toggle="collapse" data-target="#e-accordion-{{../paragraphId}}-{{id}}" class="px-2 py-1 d-flex align-items-center m-0 justify-content-between collapsed" aria-expanded="false"> 2427 <span class="p-accordion-toggle-text mb-0 line-height-sm none"> 2428 {{heading}} 2429 </span> 2430 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i> 2431 </p> 2432 </div> 2433 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse"> 2434 <div class="px-2 pb-1 p-accordion-content"> 2435 <div class="p-txt-container dvp-rich-text-content pt-1"> 2436 {{{text}}} 2437 </div> 2438 </div> 2439 </div> 2440 </div> 2441 {{/each}} 2442 </div> 2443 </div> 2444 {{/each}} 2445 2446 2447 </div> 2448 {{else}} 2449 <div class="col-12 text-center"> 2450 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related FAQs","Please sign in to access our related FAQs")</p> 2451 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p> 2452 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 2453 </div> 2454 {{/if}} 2455 </div> 2456 </div> 2457 </div> 2458 </script> 2459 </div> 2460 } 2461 else if(productPanelNameValue == "Got More Questions form") 2462 { 2463 <div class="col-12 js-dvp-product-details-more-info-section"> 2464 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2465 <div class="row"> 2466 <div class="col-12 col-md-4"> 2467 <div class="e-product-section-header"> 2468 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2> 2469 </div> 2470 </div> 2471 <div class="p col-12 col-md-8 mt-half"> 2472 @{ 2473 int currentPageId; 2474 2475 int.TryParse(pageId, out currentPageId); 2476 2477 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph; 2478 2479 int currentParagraphId = currentParagraph.GlobalRecordParagraphID; 2480 2481 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString(); 2482 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString(); 2483 2484 int formPageId; 2485 int formParagraphId; 2486 2487 int.TryParse(formPageIdString, out formPageId); 2488 int.TryParse(formParagraphIdString, out formParagraphId); 2489 2490 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId); 2491 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId); 2492 2493 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView); 2494 2495 } 2496 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString) 2497 </div> 2498 </div> 2499 </div> 2500 </div> 2501 } 2502 } 2503 </div> 2504 } 2505 2506 @:</div></div></div></div></div></section></article> 2507 2508 <footer class="bg-light"> 2509 <article> 2510 <section class="e-section"> 2511 <div class="container-fluid"> 2512 <div class="row" id="js-dvp-product-footer"> 2513 @if ( !string.IsNullOrEmpty(productFooterContent) ) 2514 { 2515 <div class="col-12 mt-2 small"> 2516 @productFooterContent 2517 </div> 2518 } 2519 <script id="js-e-handlebars-tmpl-dvp-product-footer" type="text/x-handlebars-template"> 2520 {{#if FooterContent}} 2521 <div class="col-12 mt-2 small"> 2522 {{{FooterContent}}} 2523 </div> 2524 {{/if}} 2525 </script> 2526 </div> 2527 </div> 2528 </section> 2529 </article> 2530 </footer> 2531 2532 } 2533 else if(productType.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductType.Value") == "supplies") 2534 { 2535 string rangeName = range.GetString("Range"); 2536 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>"); 2537 string rangeId = string.Empty; 2538 string therapyAreaId = string.Empty; 2539 string therapyAreaName = string.Empty; 2540 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 2541 string optionalName = string.Empty; 2542 string displayName = string.Empty; 2543 string displayNameSuperscripted = string.Empty; 2544 string groupId = string.Empty; 2545 string productName = string.Empty; 2546 string productNameJSON = string.Empty; 2547 string productDisplayName = string.Empty; 2548 string productDisplayNameSuperscripted = string.Empty; 2549 string urlFriendlyProductName = string.Empty; 2550 string productShortDescription = string.Empty; 2551 string productShortDescriptionJSON = string.Empty; 2552 string productActives = string.Empty; 2553 string productActivesJSON = string.Empty; 2554 string productStorageCondition = string.Empty; 2555 string productStorageConditionJSON = string.Empty; 2556 string productPackSize = string.Empty; 2557 string productWithdrawalPeriod = string.Empty; 2558 string lyticsTopics = string.Empty; 2559 string productDatasheet = string.Empty; 2560 string productPackInsert = string.Empty; 2561 string productSPC = string.Empty; 2562 string productMSDS = string.Empty; 2563 bool hasDocuments = true; 2564 string productDisclaimer = string.Empty; 2565 string productDisclaimerJSON = string.Empty; 2566 string productShopInformation = string.Empty; 2567 string productShopInformationJSON = string.Empty; 2568 string productImage = string.Empty; 2569 string productRewardButtonLink = string.Empty; 2570 string productRewardButtonLinkProcessed = string.Empty; 2571 string productRewardButtonText = string.Empty; 2572 bool showRewardButton = false; 2573 string productRewardAdditionalLink = string.Empty; 2574 string productRewardAdditionalLinkProcessed = string.Empty; 2575 bool showRewardAdditionalLink = false; 2576 bool productShowFooterContent = false; 2577 string productFooterContent = string.Empty; 2578 string productFooterContentJSON = string.Empty; 2579 List<string> images = new List<string>(); 2580 string productUrl = string.Empty; 2581 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts"); 2582 bool applyRangeNameToProductNames = Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"); 2583 string signInPage = Espresso.Page.Area.Item.GetValue<string>("SignUpPage"); 2584 2585 <div class="row"> 2586 <div class="col-12 d-none d-md-block" id="js-dvp-product-premium-content-highlight"> 2587 <script id="js-e-handlebars-tmpl-dvp-product-premium-content-highlight" type="text/x-handlebars-template"> 2588 {{#if premiumPages.0.searchFriendlyImageBanner}} 2589 <div class="js-dvp-product-premium-content-animate fade mb-2"> 2590 <a href="javascript:void(0);" class="js-dvp-product-details-premium-content-highlight-banner-link"> 2591 <img class="p-img" src="{{premiumPages.0.searchFriendlyImageBanner}}" alt="{{premiumPages.0.searchFriendlyTitle}}" /> 2592 </a> 2593 </div> 2594 {{/if}} 2595 </script> 2596 </div> 2597 </div> 2598 2599 if(productsInRangeCount > 1) 2600 { 2601 <div class="row e-product"> 2602 <div class="col-12 col-md-6 mb-md-3 pr-sm-3"> 2603 <h1 class="mb-1 font-weight-bold"> 2604 @rangeNameSuperscripted 2605 </h1> 2606 @foreach(LoopItem product in range.GetLoop("ProductsInRange")) 2607 { 2608 2609 groupId = product.GetString("Ecom:Group.ID"); 2610 2611 productName = product.GetString("Ecom:Product.Name"); 2612 productNameJSON = productName.Replace("\"","&quot;"); 2613 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 2614 2615 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 2616 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 2617 2618 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 2619 productDisplayNameSuperscripted = applyRangeNameToProductNames ? $"{displayNameSuperscripted} {productNameJSON}" : productNameJSON; 2620 2621 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-"); 2622 2623 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 2624 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 2625 2626 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 2627 2628 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 2629 2630 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 2631 2632 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 2633 productActivesJSON = WebUtility.HtmlDecode(Regex.Replace(productActives, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 2634 2635 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value"); 2636 productStorageConditionJSON = WebUtility.HtmlDecode(Regex.Replace(productStorageCondition, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 2637 2638 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator")); 2639 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value"); 2640 2641 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value"); 2642 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 2643 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value"); 2644 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value"); 2645 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value"); 2646 2647 hasDocuments = true; 2648 2649 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 2650 { 2651 hasDocuments = false; 2652 } 2653 2654 2655 productRewardButtonLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonLink.Value" ); 2656 productRewardButtonLinkProcessed = productRewardButtonLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardButtonLink) : productRewardButtonLink; 2657 productRewardButtonText = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonText.Value"); 2658 showRewardButton = !string.IsNullOrEmpty( productRewardButtonLinkProcessed ) && !string.IsNullOrEmpty( productRewardButtonText ); 2659 2660 productRewardAdditionalLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardAdditionalLink.Value" ); 2661 productRewardAdditionalLinkProcessed = productRewardAdditionalLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardAdditionalLink) : productRewardAdditionalLink; 2662 showRewardAdditionalLink = !string.IsNullOrEmpty( productRewardAdditionalLinkProcessed ); 2663 2664 productShowFooterContent = product.GetBoolean("Ecom:Product.CategoryField.DechraPIMProducts.ShowProductFooter.Value"); 2665 productFooterContent = productShowFooterContent ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductFooterContent.Value") : ""; 2666 2667 if ( !string.IsNullOrEmpty(productFooterContent) ) 2668 { 2669 string hrefPattern = @"href\s*=\s*(?:[""'](?<1>[^""']*)[""']|(?<1>[^>\s]+))"; 2670 2671 Match regexMatch = Regex.Match(productFooterContent, hrefPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled, TimeSpan.FromSeconds(1)); 2672 2673 while (regexMatch.Success) 2674 { 2675 string href = regexMatch.Groups[ 1 ].ToString(); 2676 if ( href.ToLower().Contains("default.aspx?id=") ) 2677 { 2678 productFooterContent = productFooterContent.Replace(href, SearchEngineFriendlyURLs.GetFriendlyUrl(href.Replace("/",""))); 2679 } 2680 regexMatch = regexMatch.NextMatch(); 2681 } 2682 2683 productFooterContentJSON = WebUtility.HtmlDecode(Regex.Replace(productFooterContent, @"\t|\n|\r", " ")); 2684 } 2685 else 2686 { 2687 productFooterContentJSON = ""; 2688 } 2689 2690 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value"); 2691 productDisclaimerJSON = WebUtility.HtmlDecode(Regex.Replace(productDisclaimer, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 2692 2693 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value"); 2694 productShopInformationJSON = WebUtility.HtmlDecode(Regex.Replace(productShopInformation, @"\t|\n|\r", " ")).Replace("\"","'").Replace("<table>","<table class='table table-striped table-condensed'>"); 2695 2696 productUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}#{urlFriendlyProductName}"; 2697 2698 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 2699 2700 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 2701 2702 dynamic JSON = new { 2703 Name = productDisplayName, 2704 ShortDescription = productShortDescriptionJSON, 2705 Image = productImage, 2706 Images = images, 2707 Actives = productActivesJSON, 2708 StorageCondition = productStorageConditionJSON, 2709 PackSize = productPackSize, 2710 WithdrawalPeriod = productWithdrawalPeriod, 2711 Datasheet = !string.IsNullOrEmpty(productDatasheet) ? showProductFileTypeDatasheet ? productDatasheet : "None" : "", 2712 PackInsert = !string.IsNullOrEmpty(productPackInsert) ? showProductFileTypePackInsert ? productPackInsert : "None" : "", 2713 SPC = !string.IsNullOrEmpty(productSPC) ? showProductFileTypeSPC ? productSPC : "None" : "", 2714 MSDS = !string.IsNullOrEmpty(productMSDS) ? showProductFileTypeMSDS ? productMSDS : "None" : "", 2715 ShowDatasheet = showProductFileTypeDatasheet, 2716 ShowPackInsert = showProductFileTypePackInsert, 2717 ShowSPC = showProductFileTypeSPC, 2718 ShowMSDS = showProductFileTypeMSDS, 2719 HasDocuments = hasDocuments, 2720 Disclaimer = productDisclaimerJSON, 2721 ShopInformation = productShopInformationJSON, 2722 ShowRewardButton = showRewardButton, 2723 RewardButtonLink = showRewardButton ? productRewardButtonLinkProcessed : "", 2724 RewardButtonText = showRewardButton ? productRewardButtonText : "", 2725 RewardAdditionalLink = showRewardAdditionalLink ? productRewardAdditionalLinkProcessed : "", 2726 FooterContent = productFooterContentJSON 2727 }; 2728 2729 <a class="js-dvp-product-list-details" href="@productUrl" title="@productDisplayName" data-productname="@urlFriendlyProductName"> 2730 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span> 2731 <div class="row px-sm-1 my-2 my-sm-0"> 2732 <div class="dvp-product-list-details col-12 p-sm-1 py-1"> 2733 <div class="row"> 2734 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container"> 2735 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=200&amp;Quality=75" alt="@productDisplayName"> 2736 </div> 2737 <div class="col-9 col-sm-8 px-sm-2 my-auto"> 2738 <p class="mb-0"> 2739 @if (applyRangeNameToProductNames) 2740 { 2741 <b>@productDisplayNameSuperscripted</b> 2742 } 2743 else 2744 { 2745 <b class="h3">@displayNameSuperscripted</b> 2746 <br> 2747 @productDisplayNameSuperscripted 2748 } 2749 </p> 2750 </div> 2751 <div class="col-2 d-none d-sm-block my-auto text-center"> 2752 <i class="material-icons material-icons-4x">keyboard_arrow_right</i> 2753 </div> 2754 </div> 2755 <script type="application/json" class="@urlFriendlyProductName"> 2756 @JsonService.Instance.ToJson(JSON) 2757 </script> 2758 </div> 2759 </div> 2760 </a> 2761 } 2762 </div> 2763 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-0 pb-4 pl-sm-3 dvp-product-details"> 2764 <div class="js-dvp-product-details-animate fade"> 2765 <div class="row"> 2766 <div class="col-12"> 2767 <div class="e-product-image-container dvp-product-details-image-container text-center"> 2768 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="dvp-product-details-image" alt="@productDisplayName"> 2769 </div> 2770 </div> 2771 </div> 2772 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 2773 { 2774 <div class="row"> 2775 <div class="col-12"> 2776 @productShortDescriptionJSON 2777 </div> 2778 </div> 2779 } 2780 <div class="row"> 2781 <div class="col-12 mt-2 table-responsive"> 2782 <table class="table"> 2783 @if(!string.IsNullOrEmpty(productActives)) 2784 { 2785 <tr> 2786 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 2787 <td>@productActives</td> 2788 </tr> 2789 } 2790 @if(!string.IsNullOrEmpty(productPackSize)) 2791 { 2792 <tr> 2793 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 2794 <td>@productPackSize</td> 2795 </tr> 2796 } 2797 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 2798 { 2799 <tr> 2800 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 2801 <td>@productWithdrawalPeriod</td> 2802 </tr> 2803 } 2804 @if(!string.IsNullOrEmpty(productStorageCondition)) 2805 { 2806 <tr> 2807 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 2808 <td>@productStorageCondition</td> 2809 </tr> 2810 } 2811 @if(hasDocuments) 2812 { 2813 <tr> 2814 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 2815 <td> 2816 @if(!string.IsNullOrEmpty(productDatasheet)) 2817 { 2818 if ( showProductFileTypeDatasheet ) 2819 { 2820 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet"> 2821 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i> 2822 </a> 2823 } 2824 else 2825 { 2826 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2827 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 2828 </a> 2829 } 2830 } 2831 @if(!string.IsNullOrEmpty(productPackInsert)) 2832 { 2833 if ( showProductFileTypePackInsert ) 2834 { 2835 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productPackInsert" data-tracking-type="Pack Insert" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productPackInsert"> 2836 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i> 2837 </a> 2838 } 2839 else 2840 { 2841 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2842 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 2843 </a> 2844 } 2845 } 2846 @if(!string.IsNullOrEmpty(productSPC)) 2847 { 2848 if ( showProductFileTypeSPC ) 2849 { 2850 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productSPC" data-tracking-type="SPC" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productSPC"> 2851 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i> 2852 </a> 2853 } 2854 else 2855 { 2856 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2857 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 2858 </a> 2859 } 2860 } 2861 @if(!string.IsNullOrEmpty(productMSDS)) 2862 { 2863 if ( showProductFileTypeMSDS ) 2864 { 2865 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productMSDS" data-tracking-type="MSDS" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productMSDS"> 2866 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i> 2867 </a> 2868 } 2869 else 2870 { 2871 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2872 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 2873 </a> 2874 } 2875 } 2876 </td> 2877 </tr> 2878 } 2879 </table> 2880 </div> 2881 </div> 2882 @if(!string.IsNullOrEmpty(productShopInformationJSON)) 2883 { 2884 <div class="row"> 2885 <div class="col-12"> 2886 <div class="table-responsive"> 2887 @productShopInformationJSON 2888 </div> 2889 </div> 2890 </div> 2891 } 2892 @if(!string.IsNullOrEmpty(productDisclaimer)) 2893 { 2894 <div class="row"> 2895 <div class="col-12"> 2896 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 2897 <small> 2898 @productDisclaimer 2899 </small> 2900 </div> 2901 </div> 2902 } 2903 @if ( showRewardButton ) 2904 { 2905 <div class="row"> 2906 <div class="col-12"> 2907 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3> 2908 </div> 2909 <div class="col-12"> 2910 <a href="@productRewardButtonLinkProcessed" target="_blank" class="btn btn-sm btn-primary text-uppercase mr-1 js-dvp-product-details-tracking-reward-button" data-tracking-range-name="@rangeName"> 2911 @productRewardButtonText 2912 </a> 2913 @if ( !hideRequestmoreinformation ) 2914 { 2915 <button class="btn btn-sm btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 2916 @Translate("Talk with a Dechra member","Talk with a Dechra member") 2917 </button> 2918 } 2919 @if ( showRewardAdditionalLink ) 2920 { 2921 <p class="mb-1 mt-1 small"> 2922 <a href="@productRewardAdditionalLinkProcessed" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName"> 2923 @Translate("Not a Dechra Rewards Member? Click here", "Not a Dechra Rewards Member? Click here") 2924 </a> 2925 </p> 2926 } 2927 </div> 2928 </div> 2929 } 2930 else 2931 { 2932 if ( !hideRequestmoreinformation ) 2933 { 2934 <div class="row"> 2935 <div class="col-12"> 2936 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 2937 @Translate( "Request more information", "Request more information" ) 2938 </button> 2939 </div> 2940 </div> 2941 } 2942 } 2943 </div> 2944 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template"> 2945 <div class="js-dvp-product-details-animate fade"> 2946 <div class="e-product-image-container multi-range"> 2947 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 2948 <div class="carousel-inner{{#if Images}} carousel-multiple-images{{/if}}"> 2949 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 2950 <img src="/admin/public/getimage.ashx?Crop=0&Image={{Image}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="{{Name}}" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0"> 2951 </div> 2952 {{#each Images}} 2953 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 2954 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image={{this}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="{{../Name}} - {{math @@index "+" 1}}" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="{{math @@index "+" 1}}"> 2955 </div> 2956 {{/each}} 2957 </div> 2958 {{#if Images}} 2959 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a> 2960 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a> 2961 <ol class="carousel-indicators"> 2962 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 2963 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{Image}}&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span> 2964 </li> 2965 {{#each Images}} 2966 <li data-target="#js-e-product-image-carousel" data-slide-to="{{math @@index "+" 1}}"> 2967 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{this}}&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span> 2968 </li> 2969 {{/each}} 2970 </ol> 2971 {{/if}} 2972 </div> 2973 </div> 2974 {{#if ShortDescription}} 2975 <div class="dvp-short-description"> 2976 {{{ShortDescription}}} 2977 </div> 2978 {{/if}} 2979 <div class="row"> 2980 <div class="col-12 mt-2 table-responsive"> 2981 <table class="table"> 2982 {{#if Actives}} 2983 <tr> 2984 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 2985 <td>{{{Actives}}}</td> 2986 </tr> 2987 {{/if}} 2988 {{#if PackSize}} 2989 <tr> 2990 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 2991 <td>{{PackSize}}</td> 2992 </tr> 2993 {{/if}} 2994 {{#if WithdrawalPeriod}} 2995 <tr> 2996 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 2997 <td>{{{WithdrawalPeriod}}}</td> 2998 </tr> 2999 {{/if}} 3000 {{#if StorageCondition}} 3001 <tr> 3002 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 3003 <td>{{{StorageCondition}}}</td> 3004 </tr> 3005 {{/if}} 3006 {{#if HasDocuments}} 3007 <tr> 3008 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 3009 <td> 3010 {{#if Datasheet}} 3011 {{#if ShowDatasheet}} 3012 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{Datasheet}}" data-tracking-type="Datasheet" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{Datasheet}}"> 3013 @Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i> 3014 </a> 3015 {{else}} 3016 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 3017 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 3018 </a> 3019 {{/if}} 3020 {{/if}} 3021 {{#if PackInsert}} 3022 {{#if ShowPackInsert}} 3023 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{PackInsert}}" data-tracking-type="Pack Insert" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{PackInsert}}"> 3024 @Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i> 3025 </a> 3026 {{else}} 3027 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 3028 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 3029 </a> 3030 {{/if}} 3031 {{/if}} 3032 {{#if SPC}} 3033 {{#if ShowSPC}} 3034 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{SPC}}" data-tracking-type="SPC" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{SPC}}"> 3035 @Translate("SPC","SPC") <i class="material-icons">get_app</i> 3036 </a> 3037 {{else}} 3038 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 3039 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 3040 </a> 3041 {{/if}} 3042 {{/if}} 3043 {{#if MSDS}} 3044 {{#if ShowMSDS}} 3045 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{MSDS}}" data-tracking-type="MSDS" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{MSDS}}"> 3046 @Translate("MSDS","MSDS") <i class="material-icons">get_app</i> 3047 </a> 3048 {{else}} 3049 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 3050 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 3051 </a> 3052 {{/if}} 3053 {{/if}} 3054 </td> 3055 </tr> 3056 {{/if}} 3057 </table> 3058 </div> 3059 </div> 3060 {{#if ShopInformation}} 3061 <div class="row mt-1"> 3062 <div class="col-12"> 3063 <div class="table-responsive"> 3064 {{{ShopInformation}}} 3065 </div> 3066 </div> 3067 </div> 3068 {{/if}} 3069 {{#if Disclaimer}} 3070 <div class="row mt-1"> 3071 <div class="col-12"> 3072 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 3073 <small> 3074 {{{Disclaimer}}} 3075 </small> 3076 </div> 3077 </div> 3078 {{/if}} 3079 {{#if ShowRewardButton}} 3080 <div class="row"> 3081 <div class="col-12"> 3082 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3> 3083 </div> 3084 <div class="col-12"> 3085 <a href="{{{RewardButtonLink}}}" target="_blank" class="btn btn-sm btn-primary text-uppercase mr-1 js-dvp-product-details-tracking-reward-button" data-tracking-range-name="@rangeName"> 3086 {{RewardButtonText}} 3087 </a> 3088 @if ( !hideRequestmoreinformation ) 3089 { 3090 <button class="btn btn-sm btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 3091 @Translate("Talk with a Dechra member","Talk with a Dechra member") 3092 </button> 3093 } 3094 {{#if RewardAdditionalLink}} 3095 <p class="mb-1 mt-1 small"> 3096 <a href="{{RewardAdditionalLink}}" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName"> 3097 @Translate("Not a Dechra Rewards Member? Click here","Not a Dechra Rewards Member? Click here") 3098 </a> 3099 </p> 3100 {{/if}} 3101 </div> 3102 </div> 3103 {{else}} 3104 @if ( !hideRequestmoreinformation ) 3105 { 3106 <div class="row"> 3107 <div class="col-12"> 3108 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 3109 @Translate( "Request more information", "Request more information" ) 3110 </button> 3111 </div> 3112 </div> 3113 } 3114 {{/if}} 3115 </div> 3116 {{#if FeedingGuideImage}} 3117 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2"> 3118 <div class="row"> 3119 <div class="col-12 col-md-4"> 3120 <div class="e-product-section-header"> 3121 <h2 class="mb-1 mb-md-0">@Translate( "Feeding guide", "Feeding guide" )</h2> 3122 </div> 3123 </div> 3124 <div class="col-12 col-md-8"> 3125 <img src="{{FeedingGuideImage}}" class="p-img"/> 3126 </div> 3127 </div> 3128 </div> 3129 {{/if}} 3130 {{#if NutrientTableImage}} 3131 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2"> 3132 <div class="row"> 3133 <div class="col-12 col-md-4"> 3134 <div class="e-product-section-header"> 3135 <h2 class="mb-1 mb-md-0">@Translate( "Nutrient table","Nutrient table")</h2> 3136 </div> 3137 </div> 3138 <div class="col-12 col-md-8"> 3139 <img src="{{NutrientTableImage}}" class="p-img"/> 3140 </div> 3141 </div> 3142 </div> 3143 {{/if}} 3144 </script> 3145 </div> 3146 </div> 3147 } 3148 else 3149 { 3150 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 3151 { 3152 3153 groupId = product.GetString("Ecom:Group.ID"); 3154 3155 productName = product.GetString("Ecom:Product.Name"); 3156 productNameJSON = productName.Replace("\"","&quot;"); 3157 3158 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 3159 3160 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 3161 3162 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 3163 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 3164 3165 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 3166 3167 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 3168 3169 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 3170 3171 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 3172 3173 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 3174 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value"); 3175 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ");; 3176 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value"); 3177 3178 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value"); 3179 3180 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 3181 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value"); 3182 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value"); 3183 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value"); 3184 3185 hasDocuments = true; 3186 3187 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 3188 { 3189 hasDocuments = false; 3190 } 3191 3192 productRewardButtonLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonLink.Value"); 3193 productRewardButtonLinkProcessed = productRewardButtonLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardButtonLink) : productRewardButtonLink; 3194 productRewardButtonText = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonText.Value"); 3195 showRewardButton = !string.IsNullOrEmpty( productRewardButtonLinkProcessed ) && !string.IsNullOrEmpty(productRewardButtonText); 3196 3197 productRewardAdditionalLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardAdditionalLink.Value" ); 3198 productRewardAdditionalLinkProcessed = productRewardAdditionalLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardAdditionalLink) : productRewardAdditionalLink; 3199 showRewardAdditionalLink = !string.IsNullOrEmpty( productRewardAdditionalLinkProcessed ); 3200 3201 productShowFooterContent = product.GetBoolean("Ecom:Product.CategoryField.DechraPIMProducts.ShowProductFooter.Value"); 3202 productFooterContent = productShowFooterContent ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductFooterContent.Value") : ""; 3203 3204 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value"); 3205 3206 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value").Replace("<table>","<table class='table table-striped table-condensed'>"); 3207 3208 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 3209 3210 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 3211 3212 } 3213 <div class="row e-product dvp-product-details"> 3214 <div class="col-12"> 3215 <div class="row"> 3216 <div class="col-12"> 3217 <h1 class="mb-1 font-weight-bold"> 3218 @rangeNameSuperscripted 3219 </h1> 3220 </div> 3221 </div> 3222 </div> 3223 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4"> 3224 <div class="row"> 3225 <div class="col-12"> 3226 <div class="e-product-image-container single-range"> 3227 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 3228 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")"> 3229 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 3230 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@productDisplayName" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0"> 3231 </div> 3232 3233 @for(int i = 0; i < images.Count(); i++) 3234 { 3235 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 3236 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@images[i]&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@productDisplayName" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="@(i + 1)"> 3237 </div> 3238 } 3239 </div> 3240 @if(images.Any()) 3241 { 3242 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a> 3243 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a> 3244 <ol class="carousel-indicators"> 3245 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 3246 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span> 3247 </li> 3248 @for(int i = 0; i < images.Count(); i++) 3249 { 3250 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)"> 3251 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@images[i]&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span> 3252 </li> 3253 } 3254 </ol> 3255 } 3256 </div> 3257 </div> 3258 </div> 3259 </div> 3260 </div> 3261 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3"> 3262 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span> 3263 @if(!string.IsNullOrEmpty(optionalName)) 3264 { 3265 <div class="row"> 3266 <div class="col-12"> 3267 <h2 class="mb-0">@displayNameSuperscripted</h2> 3268 </div> 3269 </div> 3270 } 3271 @if(!string.IsNullOrEmpty(productShortDescription)) 3272 { 3273 <div class="row"> 3274 <div class="col-12"> 3275 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")) 3276 </div> 3277 </div> 3278 } 3279 <div class="row"> 3280 <div class="col-12 mt-2 table-responsive"> 3281 <table class="table"> 3282 @if(!string.IsNullOrEmpty(productActives)) 3283 { 3284 <tr> 3285 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 3286 <td>@productActives</td> 3287 </tr> 3288 } 3289 @if(!string.IsNullOrEmpty(productPackSize)) 3290 { 3291 <tr> 3292 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 3293 <td>@productPackSize</td> 3294 </tr> 3295 } 3296 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 3297 { 3298 <tr> 3299 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 3300 <td>@productWithdrawalPeriod</td> 3301 </tr> 3302 } 3303 @if(!string.IsNullOrEmpty(productStorageCondition)) 3304 { 3305 <tr> 3306 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 3307 <td>@productStorageCondition</td> 3308 </tr> 3309 } 3310 @if(hasDocuments) 3311 { 3312 <tr> 3313 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 3314 <td> 3315 @if(!string.IsNullOrEmpty(productDatasheet)) 3316 { 3317 if ( showProductFileTypeDatasheet ) 3318 { 3319 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet"> 3320 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i> 3321 </a> 3322 } 3323 else 3324 { 3325 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 3326 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 3327 </a> 3328 } 3329 } 3330 @if(!string.IsNullOrEmpty(productPackInsert)) 3331 { 3332 if ( showProductFileTypePackInsert ) 3333 { 3334 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productPackInsert" data-tracking-type="Pack Insert" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productPackInsert"> 3335 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i> 3336 </a> 3337 } 3338 else 3339 { 3340 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 3341 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 3342 </a> 3343 } 3344 } 3345 @if(!string.IsNullOrEmpty(productSPC)) 3346 { 3347 if ( showProductFileTypeSPC ) 3348 { 3349 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productSPC" data-tracking-type="SPC" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productSPC"> 3350 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i> 3351 </a> 3352 } 3353 else 3354 { 3355 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 3356 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 3357 </a> 3358 } 3359 } 3360 @if(!string.IsNullOrEmpty(productMSDS)) 3361 { 3362 if ( showProductFileTypeMSDS ) 3363 { 3364 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productMSDS" data-tracking-type="MSDS" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productMSDS"> 3365 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i> 3366 </a> 3367 } 3368 else 3369 { 3370 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 3371 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 3372 </a> 3373 } 3374 } 3375 </td> 3376 </tr> 3377 } 3378 </table> 3379 </div> 3380 </div> 3381 @if(!string.IsNullOrEmpty(productShopInformation)) 3382 { 3383 <div class="row mt-1"> 3384 <div class="col-12"> 3385 <div class="table-responsive"> 3386 @productShopInformation 3387 </div> 3388 </div> 3389 </div> 3390 } 3391 @if(!string.IsNullOrEmpty(productDisclaimer)) 3392 { 3393 <div class="row mt-1"> 3394 <div class="col-12"> 3395 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 3396 <small> 3397 @productDisclaimer 3398 </small> 3399 </div> 3400 </div> 3401 } 3402 @if ( showRewardButton ) 3403 { 3404 <div class="row"> 3405 <div class="col-12"> 3406 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3> 3407 </div> 3408 <div class="col-12"> 3409 <a href="@productRewardButtonLinkProcessed" target="_blank" class="btn btn-sm btn-primary text-uppercase mr-1 js-dvp-product-details-tracking-reward-button" data-tracking-range-name="@rangeName"> 3410 @productRewardButtonText 3411 </a> 3412 @if ( !hideRequestmoreinformation ) 3413 { 3414 <button class="btn btn-sm btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 3415 @Translate("Talk with a Dechra member","Talk with a Dechra member") 3416 </button> 3417 } 3418 @if ( showRewardAdditionalLink ) 3419 { 3420 <p class="mb-1 mt-1 small"> 3421 <a href="@productRewardAdditionalLinkProcessed" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName"> 3422 @Translate("Not a Dechra Rewards Member? Click here", "Not a Dechra Rewards Member? Click here") 3423 </a> 3424 </p> 3425 } 3426 </div> 3427 </div> 3428 } 3429 else 3430 { 3431 if ( !hideRequestmoreinformation ) 3432 { 3433 <div class="row"> 3434 <div class="col-12"> 3435 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 3436 @Translate( "Request more information", "Request more information" ) 3437 </button> 3438 </div> 3439 </div> 3440 } 3441 } 3442 </div> 3443 </div> 3444 } 3445 3446 int productPanelsItemId = 0; 3447 3448 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId)) 3449 { 3450 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId); 3451 3452 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId"> 3453 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations) 3454 { 3455 string productPanelNameValue = productPanel.GetValue<string>("Name"); 3456 3457 if(productPanelNameValue == "Premium Content") 3458 { 3459 <div class="col-12" id="js-dvp-product-premium-content"> 3460 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3461 <div class="row"> 3462 <div class="col-12 is-loading"> 3463 <div class="e-loading-spinner"></div> 3464 </div> 3465 </div> 3466 </div> 3467 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template"> 3468 <div class="js-dvp-product-premium-content-animate fade"> 3469 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3470 <div class="row"> 3471 <div class="col-12 col-md-4"> 3472 <div class="e-product-section-header"> 3473 <h2 class="mb-1 mb-md-0"> 3474 @Translate("Premium Content","Premium Content") 3475 </h2> 3476 </div> 3477 </div> 3478 <div class="col-12 col-md-8 mt-half"> 3479 {{#each premiumPages}} 3480 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 3481 <div class="col-12 col-md-6"> 3482 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 3483 </div> 3484 <div class="col-12 col-md-6"> 3485 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 3486 <p>{{searchFriendlyDescription}}</p> 3487 <p> 3488 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}"> 3489 {{searchFriendlyButtonText}} 3490 </a> 3491 </p> 3492 </div> 3493 </div> 3494 {{/each}} 3495 </div> 3496 </div> 3497 </div> 3498 </div> 3499 </script> 3500 </div> 3501 } 3502 else if(productPanelNameValue == "Supportmaterials for vets") 3503 { 3504 <div class="col-12" id="js-dvp-product-supportmaterials-vets"> 3505 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3506 <div class="row"> 3507 <div class="col-12 is-loading"> 3508 <div class="e-loading-spinner"></div> 3509 </div> 3510 </div> 3511 </div> 3512 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template"> 3513 <div class="js-dvp-product-supportmaterials-vets-animate fade"> 3514 {{#if vetSupportmaterials.items}} 3515 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3516 <div class="row"> 3517 {{#if vetSupportmaterials.display}} 3518 <div class="col-12 col-md-4"> 3519 <div class="e-product-section-header"> 3520 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2> 3521 </div> 3522 </div> 3523 <div class="col-12 col-md-8 mt-half"> 3524 {{#each vetSupportmaterials.items}} 3525 3526 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-vet-supportmaterials-{{categoryId}}"> 3527 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 3528 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 3529 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 3530 </p> 3531 3532 <div class="row"> 3533 <div class="col-12"> 3534 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}"> 3535 <div class="row"> 3536 <div class="col-12 pl-md-3"> 3537 <div class="row"> 3538 {{#each materials}} 3539 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 3540 <div class="row"> 3541 <div class="col-12 col-md-6 text-center"> 3542 {{#if download}} 3543 {{#if loginToDownload}} 3544 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 3545 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3546 </a> 3547 {{else}} 3548 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 3549 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3550 </a> 3551 {{/if}} 3552 {{else}} 3553 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3554 {{/if}} 3555 </div> 3556 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 3557 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 3558 3559 {{#if loginToDownload}} 3560 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 3561 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download") 3562 </a> 3563 {{else}} 3564 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 3565 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 3566 </a> 3567 {{/if}} 3568 3569 @if(shopIsActive && hasAccess) 3570 { 3571 @:{{#if orderable}} 3572 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 3573 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 3574 <input type="hidden" name="CartCmd" value="Add"> 3575 <input type="hidden" name="ProductID" value="{{id}}"> 3576 <input type="hidden" name="VariantID" value=""> 3577 <input type="hidden" name="UnitID" value=""> 3578 <input type="hidden" name="Redirect" value="false"> 3579 <input type="hidden" name="Quantity" value="1"> 3580 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 3581 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 3582 </form> 3583 @:{{/if}} 3584 } 3585 </div> 3586 </div> 3587 </div> 3588 {{/each}} 3589 </div> 3590 </div> 3591 </div> 3592 </div> 3593 </div> 3594 </div> 3595 {{/each}} 3596 </div> 3597 {{else}} 3598 <div class="col-12 text-center"> 3599 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for vets are intended for healthcare professionals only.","These support materials for vets are intended for healthcare professionals only.")</p> 3600 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 3601 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 3602 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 3603 </div> 3604 {{/if}} 3605 </div> 3606 </div> 3607 {{/if}} 3608 </div> 3609 </script> 3610 3611 </div> 3612 } 3613 else if(productPanelNameValue == "Supportmaterials for pet owners") 3614 { 3615 <div class="col-12" id="js-dvp-product-supportmaterials-clients"> 3616 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3617 <div class="row"> 3618 <div class="col-12 is-loading"> 3619 <div class="e-loading-spinner"></div> 3620 </div> 3621 </div> 3622 </div> 3623 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template"> 3624 <div class="js-dvp-product-supportmaterials-clients-animate fade"> 3625 {{#if clientSupportmaterials.items}} 3626 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3627 <div class="row"> 3628 {{#if clientSupportmaterials.display}} 3629 <div class="col-12 col-md-4"> 3630 <div class="e-product-section-header"> 3631 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2> 3632 </div> 3633 </div> 3634 <div class="col-12 col-md-8 mt-half"> 3635 {{#each clientSupportmaterials.items}} 3636 3637 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-client-supportmaterials-{{categoryId}}"> 3638 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 3639 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 3640 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 3641 </p> 3642 3643 <div class="row"> 3644 <div class="col-12"> 3645 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}"> 3646 <div class="row"> 3647 <div class="col-12 pl-md-3"> 3648 <div class="row"> 3649 {{#each materials}} 3650 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 3651 <div class="row"> 3652 <div class="col-12 col-md-6 text-center"> 3653 {{#if download}} 3654 {{#if loginToDownload}} 3655 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 3656 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3657 </a> 3658 {{else}} 3659 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 3660 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3661 </a> 3662 {{/if}} 3663 {{else}} 3664 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3665 {{/if}} 3666 </div> 3667 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 3668 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 3669 {{#if download}} 3670 <p class="mb-1"> 3671 {{#if loginToDownload}} 3672 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")</a> 3673 {{else}} 3674 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 3675 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 3676 </a> 3677 {{/if}} 3678 </p> 3679 {{/if}} 3680 3681 @if(shopIsActive && hasAccess) 3682 { 3683 @:{{#if orderable}} 3684 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 3685 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 3686 <input type="hidden" name="CartCmd" value="Add"> 3687 <input type="hidden" name="ProductID" value="{{id}}"> 3688 <input type="hidden" name="VariantID" value=""> 3689 <input type="hidden" name="UnitID" value=""> 3690 <input type="hidden" name="Redirect" value="false"> 3691 <input type="hidden" name="Quantity" value="1"> 3692 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 3693 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 3694 </form> 3695 @:{{/if}} 3696 } 3697 3698 </div> 3699 </div> 3700 </div> 3701 {{/each}} 3702 </div> 3703 </div> 3704 </div> 3705 </div> 3706 </div> 3707 </div> 3708 {{/each}} 3709 </div> 3710 {{else}} 3711 <div class="col-12 text-center"> 3712 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for petowners are intended for healthcare professionals only.","These support materials for petowners are intended for healthcare professionals only.")</p> 3713 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 3714 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 3715 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 3716 </div> 3717 {{/if}} 3718 </div> 3719 </div> 3720 {{/if}} 3721 </div> 3722 </script> 3723 3724 </div> 3725 } 3726 else if(productPanelNameValue == "Videos") 3727 { 3728 <div class="col-12" id="js-dvp-product-videos"> 3729 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3730 <div class="row"> 3731 <div class="col-12 is-loading"> 3732 <div class="e-loading-spinner"></div> 3733 </div> 3734 </div> 3735 </div> 3736 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template"> 3737 <div class="js-dvp-product-videos-animate fade"> 3738 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3739 <div class="row"> 3740 {{#if display}} 3741 <div class="col-12 col-md-4"> 3742 <div class="e-product-section-header"> 3743 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2> 3744 </div> 3745 </div> 3746 <div class="col-12 col-md-8 mt-half"> 3747 {{#compare totalVideoCount '>' 4}} 3748 <div class="collapse-peek"> 3749 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos"> 3750 {{/compare}} 3751 <div class="row"> 3752 {{#each videos}} 3753 {{#each videos}} 3754 <div class="col-12 col-md-6"> 3755 <a href="javascript:void(0);" title="{{embedTitle}}" class="js-dvp-video-modal js-dvp-product-details-tracking-video-popup" data-tracking-title="{{embedTitle}}" data-tracking-range-name="@rangeName" data-tracking-url="{{{embedUrl}}}"> 3756 <div> 3757 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" /> 3758 <p class="text-center mt-1 mb-3">{{embedTitle}}</p> 3759 </div> 3760 </a> 3761 <sc{{handlebarHack}}ript type="application/json"> 3762 { 3763 "url":"{{../url}}", 3764 "header":"{{embedTitle}}", 3765 "embedUrl":"{{{embedUrl}}}" 3766 } 3767 </sc{{handlebarHack}}ript> 3768 </div> 3769 {{/each}} 3770 {{/each}} 3771 </div> 3772 {{#compare totalVideoCount '>' 4}} 3773 </div> 3774 <div class="collapse-peek-toggle"> 3775 <div class="row"> 3776 <div class="col-12 mx-auto text-center"> 3777 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos"> 3778 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span> 3779 </a> 3780 </div> 3781 </div> 3782 </div> 3783 {{/compare}} 3784 </div> 3785 </div> 3786 {{else}} 3787 <div class="col-12 text-center"> 3788 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related videos","Please sign in to access our related videos")</p> 3789 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p> 3790 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 3791 </div> 3792 {{/if}} 3793 </div> 3794 </div> 3795 </div> 3796 </script> 3797 </div> 3798 } 3799 else if(productPanelNameValue == "Related ranges") 3800 { 3801 <div class="col-12"> 3802 @if( GetLoop("RelatedRanges").Count() > 0 ) 3803 { 3804 string relatedProductsHeader = Translate("Other related products","Other related products"); 3805 3806 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value"))) 3807 { 3808 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value"); 3809 } 3810 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3811 <div class="row"> 3812 <div class="col-12 col-md-4"> 3813 <div class="e-product-section-header"> 3814 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2> 3815 </div> 3816 </div> 3817 <div class="col-12 col-md-8 mt-half dvp-ranges-list"> 3818 <div class="row"> 3819 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges")) 3820 { 3821 string relatedRangeGroupId = ""; 3822 3823 int relatedProductInt = 0; 3824 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count(); 3825 string relatedRangeName = relatedRange.GetString("Range"); 3826 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>"); 3827 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-"); 3828 3829 <div class="col-12 col-lg-6 mb-3"> 3830 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")"> 3831 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3> 3832 </div> 3833 <div class="col-12 px-1 pt-1 border dvp-range"> 3834 <div> 3835 <div class="row"> 3836 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange")) 3837 { 3838 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId; 3839 3840 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage"); 3841 3842 if(relatedProductInt == 2) 3843 { 3844 @:</div> 3845 @:</div> 3846 @:<div class="collapse" id="range-@relatedRangeNameCleaned"> 3847 @:<div class="row"> 3848 } 3849 3850 string relatedUrl = string.Empty; 3851 3852 string relatedUrlFriendlyProduct = string.Empty; 3853 3854 string relatedProductName = product.GetString("Ecom:Product.Name"); 3855 3856 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName"); 3857 3858 string relatedProductDisplayName = relatedProductName; 3859 string relatedProductTitleName = relatedProductName; 3860 3861 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 3862 { 3863 if(hideRelatedProductName) 3864 { 3865 relatedProductDisplayName = relatedRangeNameSuperscripted; 3866 relatedProductTitleName = relatedRangeName; 3867 } 3868 else 3869 { 3870 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName; 3871 relatedProductTitleName = relatedRangeName + " " + relatedProductName; 3872 } 3873 } 3874 3875 if(product.GetBoolean("Ecom:Product:Field.IsDiets")) 3876 { 3877 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 3878 } 3879 else 3880 { 3881 relatedUrl = relatedProductName; 3882 } 3883 3884 if(relatedProductsInRangeCount > 1) 3885 { 3886 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-"); 3887 } 3888 3889 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 3890 3891 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct; 3892 3893 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center"> 3894 <a href="@relatedProductUrl" title="@relatedProductTitleName"> 3895 <div class="row"> 3896 <div class="col-12 dvp-image-container"> 3897 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@relatedProductImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@relatedProductTitleName"> 3898 </div> 3899 <div class="col-12"> 3900 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p> 3901 </div> 3902 </div> 3903 </a> 3904 </div> 3905 3906 relatedProductInt++; 3907 } 3908 </div> 3909 </div> 3910 <div class="row mt-1 dvp-view-more-products"> 3911 @if(relatedProductsInRangeCount > 2) 3912 { 3913 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2; 3914 3915 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products"); 3916 3917 if(relatedProductsInRangeCount == 3 ) 3918 { 3919 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product"); 3920 } 3921 3922 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString()); 3923 3924 <div class="col-12"> 3925 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more"> 3926 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@relatedRangeNameCleaned" aria-expanded="false" aria-controls="range-@relatedRangeNameCleaned" href="javascript:void(0);"> 3927 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span> 3928 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span> 3929 </a> 3930 </p> 3931 </div> 3932 } 3933 </div> 3934 </div> 3935 </div> 3936 } 3937 </div> 3938 </div> 3939 </div> 3940 </div> 3941 } 3942 </div> 3943 } 3944 else if(productPanelNameValue == "Newsletter") 3945 { 3946 <div class="col-12"> 3947 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3948 <div class="row"> 3949 <div class="col-12 col-md-4"> 3950 <div class="e-product-section-header"> 3951 <h2 class="mb-1 mb-md-0">Newsletter</h2> 3952 </div> 3953 </div> 3954 <div class="col-12 col-md-8"> 3955 <div class="dvp-newsletter-signup-form"> 3956 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide"> 3957 <div class="form-group"> 3958 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label> 3959 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter"> 3960 </div> 3961 <div class="form-group"> 3962 <button type="submit" class="btn btn-primary">Sign up</button> 3963 </div> 3964 </form> 3965 </div> 3966 </div> 3967 </div> 3968 </div> 3969 </div> 3970 } 3971 else if(productPanelNameValue == "eLearning") 3972 { 3973 <div class="col-12" id="js-dvp-product-elearning"> 3974 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3975 <div class="row"> 3976 <div class="col-12 is-loading"> 3977 <div class="e-loading-spinner"></div> 3978 </div> 3979 </div> 3980 </div> 3981 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template"> 3982 <div class="js-dvp-product-elearning-animate fade"> 3983 {{#if elearning.items}} 3984 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3985 <div class="row"> 3986 <div class="col-12 col-md-4"> 3987 <div class="e-product-section-header"> 3988 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2> 3989 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" /> 3990 </div> 3991 </div> 3992 <div class="col-12 col-md-8"> 3993 <h3> 3994 {{elearning.items.0.courseAmountText}} 3995 </h3> 3996 <div class="row"> 3997 <div class="col-12"> 3998 <div class="list-group"> 3999 {{#if elearning.display}} 4000 {{#each elearning.items.0.courses}} 4001 <a class="px-2 list-group-item list-group-item-action js-dvp-product-details-tracking-elearning-click" href="{{url}}" target="_blank" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 4002 <b>{{name}}</b> 4003 </a> 4004 {{/each}} 4005 {{else}} 4006 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p> 4007 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 4008 {{/if}} 4009 </div> 4010 </div> 4011 </div> 4012 {{#unless elearning.display}} 4013 <div class="row mt-2"> 4014 <div class="col-12"> 4015 <div class="bg-academy"> 4016 <div class="row p-2"> 4017 @{ 4018 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString(); 4019 } 4020 <div class="col-12"> 4021 <h3 class="text-white mb-1">@Translate("Don't have an account on our free eLearning platform for vets?","Don't have an account on our free eLearning platform for vets?")</h3> 4022 </div> 4023 <div class="col-12 col-md-8 text-white"> 4024 <ul class="mb-0"> 4025 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li> 4026 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li> 4027 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li> 4028 </ul> 4029 </div> 4030 <div class="col-12 col-md-4 pt-2"> 4031 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p> 4032 </div> 4033 </div> 4034 </div> 4035 </div> 4036 </div> 4037 {{/unless}} 4038 </div> 4039 </div> 4040 </div> 4041 {{/if}} 4042 </div> 4043 </script> 4044 </div> 4045 } 4046 else if(productPanelNameValue == "Product Websites") 4047 { 4048 <div class="col-12" id="js-dvp-product-websites"> 4049 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4050 <div class="row"> 4051 <div class="col-12 is-loading"> 4052 <div class="e-loading-spinner"></div> 4053 </div> 4054 </div> 4055 </div> 4056 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template"> 4057 <div class="js-dvp-product-websites-animate fade"> 4058 {{#if websites.items}} 4059 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4060 <div class="row"> 4061 {{#if websites.display}} 4062 <div class="col-12 col-md-4"> 4063 <div class="e-product-section-header"> 4064 <h2 class="mb-1 mb-md-0"> 4065 {{#compare count '>' 1}} 4066 @Translate("Product Websites","Product Websites") 4067 {{else}} 4068 @Translate("Product Website","Product Website") 4069 {{/compare}} 4070 </h2> 4071 </div> 4072 </div> 4073 <div class="col-12 col-md-8 mt-half"> 4074 {{#each websites.items.0.website}} 4075 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 4076 <div class="col-12 col-md-6"> 4077 <p class="lead"> 4078 {{name}} 4079 </p> 4080 <p> 4081 <a class="btn btn-primary js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 4082 @Translate("Go to website","Go to website") 4083 </a> 4084 </p> 4085 </div> 4086 <div class="col-12 col-md-6"> 4087 <a class="js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 4088 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" /> 4089 </a> 4090 </div> 4091 </div> 4092 {{/each}} 4093 </div> 4094 {{else}} 4095 <div class="col-12 text-center"> 4096 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our product websites","Please sign in to access our product websites")</p> 4097 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p> 4098 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 4099 </div> 4100 {{/if}} 4101 </div> 4102 </div> 4103 {{/if}} 4104 </div> 4105 </script> 4106 </div> 4107 } 4108 else if(productPanelNameValue == "Previous Premium Content") 4109 { 4110 <div class="col-12" id="js-dvp-product-previous-premium-content"> 4111 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4112 <div class="row"> 4113 <div class="col-12 is-loading"> 4114 <div class="e-loading-spinner"></div> 4115 </div> 4116 </div> 4117 </div> 4118 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template"> 4119 <div class="js-dvp-product-previous-premium-content-animate fade"> 4120 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4121 <div class="row"> 4122 <div class="col-12 col-md-4"> 4123 <div class="e-product-section-header"> 4124 <h2 class="mb-1 mb-md-0"> 4125 @Translate("Previous Premium Content","Premium Content") 4126 </h2> 4127 </div> 4128 </div> 4129 <div class="col-12 col-md-8 mt-half"> 4130 {{#each premiumPages}} 4131 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 4132 <div class="col-12 col-md-6"> 4133 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 4134 </div> 4135 <div class="col-12 col-md-6"> 4136 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 4137 <p>{{searchFriendlyDescription}}</p> 4138 <p> 4139 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}"> 4140 {{searchFriendlyButtonText}} 4141 </a> 4142 </p> 4143 </div> 4144 </div> 4145 {{/each}} 4146 </div> 4147 </div> 4148 </div> 4149 </div> 4150 </script> 4151 </div> 4152 } 4153 else if(productPanelNameValue == "Frequent Treatment Questions") 4154 { 4155 <div class="col-12" id="js-dvp-product-faq"> 4156 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4157 <div class="row"> 4158 <div class="col-12 is-loading"> 4159 <div class="e-loading-spinner"></div> 4160 </div> 4161 </div> 4162 </div> 4163 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template"> 4164 <div class="js-dvp-product-faq-animate fade"> 4165 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4166 <div class="row"> 4167 {{#if display}} 4168 <div class="col-12 col-md-4"> 4169 <div class="e-product-section-header"> 4170 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2> 4171 </div> 4172 </div> 4173 <div class="col-12 col-md-8 mt-half dvp-faq"> 4174 {{# faqs}} 4175 {{#each faq}} 4176 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}"> 4177 <div class="row"> 4178 <div class="col-12"> 4179 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}"> 4180 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 4181 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 4182 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small> 4183 </h3> 4184 </div> 4185 </div> 4186 <div class="row"> 4187 <div class="col-12"> 4188 <div class="collapse" id="collapse-{{paragraphId}}"> 4189 <div class="row"> 4190 <div class="col-12 pl-3"> 4191 {{#each faqList}} 4192 <div class="row"> 4193 <div class="col-12 mt-1"> 4194 <a href="javascript:void(0);" class="js-dvp-faq-modal js-dvp-product-details-tracking-faq-popup" data-tracking-title="{{listHeader}}" data-tracking-category-name="{{../categoryName}}" data-tracking-range-name="@rangeName" data-tracking-url="{{../../url}}"> 4195 {{listHeader}} 4196 </a> 4197 <sc{{handlebarHack}}ript type="application/json"> 4198 { 4199 "url":"{{../../url}}", 4200 "categoryName": "{{../categoryName}}", 4201 "header":"{{listHeader}}", 4202 "content":"{{{listContent}}}" 4203 } 4204 </sc{{handlebarHack}}ript> 4205 </div> 4206 </div> 4207 {{/each}} 4208 </div> 4209 </div> 4210 </div> 4211 </div> 4212 </div> 4213 </div> 4214 {{/each}} 4215 {{/faqs}} 4216 4217 {{#each accordions}} 4218 <div class="p col-12 p-accordion" id="{{paragraphID}}"> 4219 {{#if introText}} 4220 <div class="p-accordion-lead"> 4221 {{{introText}}} 4222 </div> 4223 {{/if}} 4224 <div class="p-accordion-container "> 4225 {{#each accordionItems}} 4226 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 "> 4227 <div class="p-accordion-toggle"> 4228 <p data-toggle="collapse" data-target="#e-accordion-{{../paragraphId}}-{{id}}" class="px-2 py-1 d-flex align-items-center m-0 justify-content-between collapsed" aria-expanded="false"> 4229 <span class="p-accordion-toggle-text mb-0 line-height-sm none"> 4230 {{heading}} 4231 </span> 4232 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i> 4233 </p> 4234 </div> 4235 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse"> 4236 <div class="px-2 pb-1 p-accordion-content"> 4237 <div class="p-txt-container dvp-rich-text-content pt-1"> 4238 {{{text}}} 4239 </div> 4240 </div> 4241 </div> 4242 </div> 4243 {{/each}} 4244 </div> 4245 </div> 4246 {{/each}} 4247 4248 4249 </div> 4250 {{else}} 4251 <div class="col-12 text-center"> 4252 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related FAQs","Please sign in to access our related FAQs")</p> 4253 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p> 4254 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 4255 </div> 4256 {{/if}} 4257 </div> 4258 </div> 4259 </div> 4260 </script> 4261 </div> 4262 } 4263 else if(productPanelNameValue == "Got More Questions form") 4264 { 4265 <div class="col-12 js-dvp-product-details-more-info-section"> 4266 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4267 <div class="row"> 4268 <div class="col-12 col-md-4"> 4269 <div class="e-product-section-header"> 4270 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2> 4271 </div> 4272 </div> 4273 <div class="p col-12 col-md-8 mt-half"> 4274 @{ 4275 int currentPageId; 4276 4277 int.TryParse(pageId, out currentPageId); 4278 4279 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph; 4280 4281 int currentParagraphId = currentParagraph.GlobalRecordParagraphID; 4282 4283 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString(); 4284 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString(); 4285 4286 int formPageId; 4287 int formParagraphId; 4288 4289 int.TryParse(formPageIdString, out formPageId); 4290 int.TryParse(formParagraphIdString, out formParagraphId); 4291 4292 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId); 4293 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId); 4294 4295 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView); 4296 4297 } 4298 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString) 4299 </div> 4300 </div> 4301 </div> 4302 </div> 4303 } 4304 } 4305 </div> 4306 } 4307 4308 @:</div></div></div></div></div></section></article> 4309 4310 <footer class="bg-light"> 4311 <article> 4312 <section class="e-section"> 4313 <div class="container-fluid"> 4314 <div class="row" id="js-dvp-product-footer"> 4315 @if ( !string.IsNullOrEmpty(productFooterContent) ) 4316 { 4317 <div class="col-12 mt-2 small"> 4318 @productFooterContent 4319 </div> 4320 } 4321 <script id="js-e-handlebars-tmpl-dvp-product-footer" type="text/x-handlebars-template"> 4322 {{#if FooterContent}} 4323 <div class="col-12 mt-2 small"> 4324 {{{FooterContent}}} 4325 </div> 4326 {{/if}} 4327 </script> 4328 </div> 4329 </div> 4330 </section> 4331 </article> 4332 </footer> 4333 4334 } 4335 else if(productType.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductType.Value") == "diet") 4336 { 4337 string rangeName = range.GetString("Range"); 4338 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>"); 4339 string rangeId = string.Empty; 4340 string therapyAreaId = string.Empty; 4341 string therapyAreaName = string.Empty; 4342 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 4343 string optionalName = string.Empty; 4344 string displayName = string.Empty; 4345 string displayNameSuperscripted = string.Empty; 4346 string groupId = string.Empty; 4347 string productName = string.Empty; 4348 string productNameJSON = string.Empty; 4349 string productDisplayName = string.Empty; 4350 string productDisplayNameSuperscripted = string.Empty; 4351 string urlFriendlyProductName = string.Empty; 4352 string productShortDescription = string.Empty; 4353 string productShortDescriptionJSON = string.Empty; 4354 string productColorCode = string.Empty; 4355 string productPublicProductCode = string.Empty; 4356 string productIngredients = string.Empty; 4357 string productIngredientsJSON = string.Empty; 4358 string productPackSize = string.Empty; 4359 string lyticsTopics = string.Empty; 4360 string productDatasheet = string.Empty; 4361 string productRecommendation = string.Empty; 4362 string productNotRecommendedFor = string.Empty; 4363 string productIcon1 = string.Empty; 4364 string productIcon2 = string.Empty; 4365 string productIcon3 = string.Empty; 4366 string productIcon4 = string.Empty; 4367 string productIcon5 = string.Empty; 4368 string productIcon6 = string.Empty; 4369 string productTextArea1 = string.Empty; 4370 string productTextArea2 = string.Empty; 4371 string productTextArea3 = string.Empty; 4372 string productTextArea4 = string.Empty; 4373 string productTextArea5 = string.Empty; 4374 string productTextArea6 = string.Empty; 4375 string productFeedingGuideImage = string.Empty; 4376 string productNutrientTableImage = string.Empty; 4377 Dictionary<string, dynamic> dietDetails = new Dictionary<string, dynamic>(); 4378 Dictionary<string, dynamic> dietFeedingGuides = new Dictionary<string, dynamic>(); 4379 string productImage = string.Empty; 4380 List<string> images = new List<string>(); 4381 string productUrl = string.Empty; 4382 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts"); 4383 bool applyRangeNameToProductNames = Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"); 4384 4385 <div class="row"> 4386 <div class="col-12 d-none d-md-block" id="js-dvp-product-premium-content-highlight"> 4387 <script id="js-e-handlebars-tmpl-dvp-product-premium-content-highlight" type="text/x-handlebars-template"> 4388 {{#if premiumPages.0.searchFriendlyImageBanner}} 4389 <div class="js-dvp-product-premium-content-animate fade mb-2"> 4390 <a href="javascript:void(0);" class="js-dvp-product-details-premium-content-highlight-banner-link"> 4391 <img class="p-img" src="{{premiumPages.0.searchFriendlyImageBanner}}" alt="{{premiumPages.0.searchFriendlyTitle}}" /> 4392 </a> 4393 </div> 4394 {{/if}} 4395 </script> 4396 </div> 4397 </div> 4398 4399 @functions 4400 { 4401 4402 public dynamic DietApi(string method, string productNumber, string cultureInfoName) 4403 { 4404 if ( !string.IsNullOrEmpty( method ) && !string.IsNullOrEmpty( productNumber ) && !string.IsNullOrEmpty( cultureInfoName )) 4405 { 4406 productNumber = Regex.Replace( productNumber, @".*_", "", RegexOptions.None, TimeSpan.FromMilliseconds( 100 ) ); 4407 4408 if ( !string.IsNullOrEmpty( productNumber ) ) 4409 { 4410 System.Net.WebRequest request = System.Net.WebRequest.Create($"https://dietspim.dechra.espresso4.dk/api/dechra-diets/v1/{method}/{productNumber}/{cultureInfoName}"); 4411 request.Timeout = 1000; 4412 request.Method = "GET"; 4413 request.ContentType = "application/json"; 4414 4415 using (dynamic response = (System.Net.HttpWebResponse) request.GetResponse()) 4416 { 4417 using (System.IO.Stream stream = response.GetResponseStream()) 4418 { 4419 using (System.IO.StreamReader reader = new System.IO.StreamReader(stream)) 4420 { 4421 return Newtonsoft.Json.JsonConvert.DeserializeObject(reader.ReadToEnd()); 4422 } 4423 } 4424 } 4425 } 4426 } 4427 return null; 4428 } 4429 4430 } 4431 4432 if(productsInRangeCount > 1) 4433 { 4434 <div class="row e-product"> 4435 <div class="col-12 col-md-6 mb-md-3 pr-sm-3"> 4436 <h1 class="mb-1 font-weight-bold"> 4437 @rangeNameSuperscripted 4438 </h1> 4439 @foreach(LoopItem product in range.GetLoop("ProductsInRange")) 4440 { 4441 groupId = product.GetString("Ecom:Group.ID"); 4442 4443 productName = product.GetString("Ecom:Product.Name"); 4444 productNameJSON = productName.Replace("\"","&quot;"); 4445 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 4446 4447 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 4448 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 4449 4450 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 4451 productDisplayNameSuperscripted = applyRangeNameToProductNames ? $"{displayNameSuperscripted} {productNameJSON}" : productNameJSON; 4452 4453 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-"); 4454 4455 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 4456 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4457 4458 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 4459 4460 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 4461 4462 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 4463 4464 productIngredients = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 4465 productIngredientsJSON = WebUtility.HtmlDecode(Regex.Replace(productIngredients, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4466 4467 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator")); 4468 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value"); 4469 4470 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 4471 4472 productColorCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.ColorCode.Value"); 4473 4474 productPublicProductCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.PublicProductCode.Value"); 4475 4476 productRecommendation = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Recommendation.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4477 productNotRecommendedFor = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NotRecommendedFor.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4478 4479 productIcon1 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon1.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon1.Value").Replace("http://","") + ".svg" : ""; 4480 productIcon2 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon2.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon2.Value").Replace("http://","") + ".svg" : ""; 4481 productIcon3 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon3.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon3.Value").Replace("http://","") + ".svg" : ""; 4482 productIcon4 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon4.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon4.Value").Replace("http://","") + ".svg" : ""; 4483 productIcon5 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon5.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon5.Value").Replace("http://","") + ".svg" : ""; 4484 productIcon6 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon6.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon6.Value").Replace("http://","") + ".svg" : ""; 4485 4486 productTextArea1 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea1.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4487 productTextArea2 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea2.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4488 productTextArea3 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea3.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4489 productTextArea4 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea4.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4490 productTextArea5 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea5.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4491 productTextArea6 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea6.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4492 4493 productFeedingGuideImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.FeedingGuideImage.Value"); 4494 productNutrientTableImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NutrientTableImage.Value"); 4495 4496 productUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}#{urlFriendlyProductName}"; 4497 4498 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 4499 4500 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 4501 4502 if ( !string.IsNullOrEmpty(HttpContext.Current.Request["test"]) && HttpContext.Current.Request["test"] == "true" && !string.IsNullOrEmpty( product.GetString("Ecom:Product.Number") ) ) 4503 { 4504 dietDetails.Add(productDisplayNameSuperscripted, DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name)); 4505 dietFeedingGuides.Add(productDisplayNameSuperscripted, DietApi( "feedingguide", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name)); 4506 } 4507 4508 dynamic JSON = new { 4509 Name = productDisplayName, 4510 ShortDescription = productShortDescriptionJSON, 4511 Image = productImage, 4512 Images = images, 4513 Ingredients = productIngredientsJSON, 4514 PackSize = productPackSize, 4515 Datasheet = productDatasheet, 4516 ColorCode = productColorCode, 4517 ProductCode = productPublicProductCode, 4518 Recommendation = productRecommendation, 4519 NotRecommendedFor = productNotRecommendedFor, 4520 Icon1 = productIcon1, 4521 Icon2 = productIcon2, 4522 Icon3 = productIcon3, 4523 Icon4 = productIcon4, 4524 Icon5 = productIcon5, 4525 Icon6 = productIcon6, 4526 TextArea1 = productTextArea1, 4527 TextArea2 = productTextArea2, 4528 TextArea3 = productTextArea3, 4529 TextArea4 = productTextArea4, 4530 TextArea5 = productTextArea5, 4531 TextArea6 = productTextArea6, 4532 FeedingGuideImage = productFeedingGuideImage, 4533 NutrientTableImage = productNutrientTableImage, 4534 Details = DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name) 4535 }; 4536 4537 <a class="js-dvp-product-list-details" href="@productUrl" title="@productDisplayName" data-productname="@urlFriendlyProductName"> 4538 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span> 4539 <div class="row px-sm-1 my-2 my-sm-0"> 4540 <div class="dvp-product-list-details col-12 p-sm-1 py-1"> 4541 <div class="row"> 4542 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container"> 4543 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=200&amp;Quality=75" alt="@productDisplayName"> 4544 </div> 4545 <div class="col-9 col-sm-8 px-sm-2 my-auto"> 4546 <p class="mb-0"> 4547 @if (applyRangeNameToProductNames) 4548 { 4549 <b>@productDisplayNameSuperscripted</b> 4550 } 4551 else 4552 { 4553 <b class="h3">@displayNameSuperscripted</b> 4554 <br> 4555 @productDisplayNameSuperscripted 4556 } 4557 </p> 4558 </div> 4559 <div class="col-2 d-none d-sm-block my-auto text-center"> 4560 <i class="material-icons material-icons-4x">keyboard_arrow_right</i> 4561 </div> 4562 </div> 4563 <script type="application/json" class="@urlFriendlyProductName"> 4564 @JsonService.Instance.ToJson(JSON) 4565 </script> 4566 </div> 4567 </div> 4568 </a> 4569 } 4570 </div> 4571 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-0 pb-4 pl-sm-3 dvp-product-details"> 4572 <div class="js-dvp-product-details-animate fade"> 4573 <div class="row"> 4574 <div class="col-12"> 4575 <div class="e-product-image-container dvp-product-details-image-container text-center"> 4576 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="dvp-product-details-image" alt="@productDisplayName"> 4577 </div> 4578 </div> 4579 </div> 4580 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 4581 { 4582 <div class="row"> 4583 <div class="col-12"> 4584 @productShortDescriptionJSON 4585 </div> 4586 </div> 4587 } 4588 <div class="row"> 4589 <div class="col-12 mt-2 table-responsive"> 4590 <table class="table"> 4591 @if(!string.IsNullOrEmpty(productIngredientsJSON)) 4592 { 4593 <tr> 4594 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 4595 <td>@productIngredientsJSON</td> 4596 </tr> 4597 } 4598 @if(!string.IsNullOrEmpty(productRecommendation)) 4599 { 4600 <tr> 4601 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td> 4602 <td>@productRecommendation</td> 4603 </tr> 4604 } 4605 @if(!string.IsNullOrEmpty(productNotRecommendedFor)) 4606 { 4607 <tr> 4608 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td> 4609 <td>@productNotRecommendedFor</td> 4610 </tr> 4611 } 4612 @if(!string.IsNullOrEmpty(productPackSize)) 4613 { 4614 <tr> 4615 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 4616 <td>@productPackSize</td> 4617 </tr> 4618 } 4619 @if(!string.IsNullOrEmpty(productDatasheet)) 4620 { 4621 <tr> 4622 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 4623 <td> 4624 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet"> 4625 @Translate("Download","Download") <i class="material-icons">get_app</i> 4626 </a> 4627 </td> 4628 </tr> 4629 } 4630 </table> 4631 </div> 4632 </div> 4633 @if(!hideRequestmoreinformation) 4634 { 4635 <div class="row"> 4636 <div class="col-12"> 4637 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 4638 @Translate("Request more information","Request more information") 4639 </button> 4640 </div> 4641 </div> 4642 } 4643 </div> 4644 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template"> 4645 <div class="js-dvp-product-details-animate fade"> 4646 <div class="e-product-image-container multi-range"> 4647 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 4648 <div class="carousel-inner{{#if Images}} carousel-multiple-images{{/if}}"> 4649 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 4650 <img src="/admin/public/getimage.ashx?Crop=0&Image={{Image}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="{{Name}}" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0"> 4651 </div> 4652 {{#each Images}} 4653 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 4654 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image={{this}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="{{../Name}} - {{math @@index "+" 1}}" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="{{math @@index "+" 1}}"> 4655 </div> 4656 {{/each}} 4657 </div> 4658 {{#if Images}} 4659 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a> 4660 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a> 4661 <ol class="carousel-indicators"> 4662 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 4663 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{Image}}&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span> 4664 </li> 4665 {{#each Images}} 4666 <li data-target="#js-e-product-image-carousel" data-slide-to="{{math @@index "+" 1}}"> 4667 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{this}}&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span> 4668 </li> 4669 {{/each}} 4670 </ol> 4671 {{/if}} 4672 </div> 4673 </div> 4674 {{#if ShortDescription}} 4675 <div class="dvp-short-description"> 4676 {{{ShortDescription}}} 4677 </div> 4678 {{/if}} 4679 <div class="row"> 4680 <div class="col-12 mt-2 table-responsive"> 4681 <table class="table"> 4682 {{#if Ingredients}} 4683 <tr> 4684 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 4685 <td>{{{Ingredients}}}</td> 4686 </tr> 4687 {{/if}} 4688 {{#if Recommendation}} 4689 <tr> 4690 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td> 4691 <td>{{{Recommendation}}}</td> 4692 </tr> 4693 {{/if}} 4694 {{#if NotRecommendedFor}} 4695 <tr> 4696 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td> 4697 <td>{{{NotRecommendedFor}}}</td> 4698 </tr> 4699 {{/if}} 4700 {{#if PackSize}} 4701 <tr> 4702 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 4703 <td>{{PackSize}}</td> 4704 </tr> 4705 {{/if}} 4706 {{#if Datasheet}} 4707 <tr> 4708 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 4709 <td> 4710 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{Datasheet}}" data-tracking-type="Datasheet" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{Datasheet}}"> 4711 @Translate("Download","Download") <i class="material-icons">get_app</i> 4712 </a> 4713 </td> 4714 </tr> 4715 {{/if}} 4716 </table> 4717 </div> 4718 </div> 4719 <div class="row"> 4720 {{#if Details}} 4721 {{#each Details}} 4722 <div class="col-12"> 4723 <div class="row mb-2"> 4724 <div class="col-6 col-md-2"> 4725 <div style="background-color:{{../ColorCode}};" class="rounded text-center text-white"> 4726 <i class="dechra-details-icon dechra-icon-{{IconCssClass}}"></i> 4727 </div> 4728 </div> 4729 <div class="col-12 col-md-10 d-flex align-items-center"> 4730 <p class="mb-0">{{{Description}}}</p> 4731 </div> 4732 </div> 4733 </div> 4734 {{/each}} 4735 {{else}} 4736 {{#if Icon1}} 4737 <div class="col-12"> 4738 <div class="row mb-2"> 4739 <div class="col-6 col-md-2"> 4740 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4741 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon1}}" /> 4742 </div> 4743 </div> 4744 <div class="col-12 col-md-10 d-flex align-items-center"> 4745 <p class="mb-0">{{{TextArea1}}}</p> 4746 </div> 4747 </div> 4748 </div> 4749 {{/if}} 4750 {{#if Icon2}} 4751 <div class="col-12"> 4752 <div class="row mb-2"> 4753 <div class="col-6 col-md-2"> 4754 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4755 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon2}}" /> 4756 </div> 4757 </div> 4758 <div class="col-12 col-md-10 d-flex align-items-center"> 4759 <p class="mb-0">{{{TextArea2}}}</p> 4760 </div> 4761 </div> 4762 </div> 4763 {{/if}} 4764 {{#if Icon3}} 4765 <div class="col-12"> 4766 <div class="row mb-2"> 4767 <div class="col-6 col-md-2"> 4768 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4769 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon3}}" /> 4770 </div> 4771 </div> 4772 <div class="col-12 col-md-10 d-flex align-items-center"> 4773 <p class="mb-0">{{{TextArea3}}}</p> 4774 </div> 4775 </div> 4776 </div> 4777 {{/if}} 4778 {{#if Icon4}} 4779 <div class="col-12"> 4780 <div class="row mb-2"> 4781 <div class="col-6 col-md-2"> 4782 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4783 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon4}}" /> 4784 </div> 4785 </div> 4786 <div class="col-12 col-md-10 d-flex align-items-center"> 4787 <p class="mb-0">{{{TextArea4}}}</p> 4788 </div> 4789 </div> 4790 </div> 4791 {{/if}} 4792 {{#if Icon5}} 4793 <div class="col-12"> 4794 <div class="row mb-2"> 4795 <div class="col-6 col-md-2"> 4796 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4797 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon5}}" /> 4798 </div> 4799 </div> 4800 <div class="col-12 col-md-10 d-flex align-items-center"> 4801 <p class="mb-0">{{{TextArea5}}}</p> 4802 </div> 4803 </div> 4804 </div> 4805 {{/if}} 4806 {{#if Icon6}} 4807 <div class="col-12"> 4808 <div class="row mb-2"> 4809 <div class="col-6 col-md-2"> 4810 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4811 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon6}}" /> 4812 </div> 4813 </div> 4814 <div class="col-12 col-md-10 d-flex align-items-center"> 4815 <p class="mb-0">{{{TextArea6}}}</p> 4816 </div> 4817 </div> 4818 </div> 4819 {{/if}} 4820 {{/if}} 4821 </div> 4822 @if(!hideRequestmoreinformation) 4823 { 4824 <div class="row"> 4825 <div class="col-12"> 4826 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 4827 @Translate("Request more information","Request more information") 4828 </button> 4829 </div> 4830 </div> 4831 } 4832 </div> 4833 {{#if FeedingGuideImage}} 4834 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2"> 4835 <div class="row"> 4836 <div class="col-12 col-md-4"> 4837 <div class="e-product-section-header"> 4838 <h2 class="mb-1 mb-md-0">@Translate( "Feeding guide", "Feeding guide" )</h2> 4839 </div> 4840 </div> 4841 <div class="col-12 col-md-8"> 4842 <img src="{{FeedingGuideImage}}" class="p-img"/> 4843 </div> 4844 </div> 4845 </div> 4846 {{/if}} 4847 {{#if NutrientTableImage}} 4848 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2"> 4849 <div class="row"> 4850 <div class="col-12 col-md-4"> 4851 <div class="e-product-section-header"> 4852 <h2 class="mb-1 mb-md-0">@Translate( "Nutrient table","Nutrient table")</h2> 4853 </div> 4854 </div> 4855 <div class="col-12 col-md-8"> 4856 <img src="{{NutrientTableImage}}" class="p-img"/> 4857 </div> 4858 </div> 4859 </div> 4860 {{/if}} 4861 </script> 4862 </div> 4863 </div> 4864 } 4865 else 4866 { 4867 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 4868 { 4869 groupId = product.GetString("Ecom:Group.ID"); 4870 4871 productName = product.GetString("Ecom:Product.Name"); 4872 productNameJSON = productName.Replace("\"","&quot;"); 4873 4874 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 4875 4876 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 4877 4878 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 4879 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 4880 4881 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 4882 4883 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 4884 4885 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 4886 4887 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 4888 4889 productIngredients = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 4890 4891 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator")); 4892 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value"); 4893 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 4894 4895 productColorCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.ColorCode.Value"); 4896 4897 productPublicProductCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.PublicProductCode.Value"); 4898 4899 productRecommendation = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Recommendation.Value"); 4900 productNotRecommendedFor = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NotRecommendedFor.Value"); 4901 4902 productIcon1 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon1.Value").Replace("http://","") + ".svg"; 4903 productIcon2 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon2.Value").Replace("http://","") + ".svg"; 4904 productIcon3 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon3.Value").Replace("http://","") + ".svg"; 4905 productIcon4 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon4.Value").Replace("http://","") + ".svg"; 4906 productIcon5 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon5.Value").Replace("http://","") + ".svg"; 4907 productIcon6 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon6.Value").Replace("http://","") + ".svg"; 4908 4909 productTextArea1 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea1.Value"); 4910 productTextArea2 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea2.Value"); 4911 productTextArea3 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea3.Value"); 4912 productTextArea4 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea4.Value"); 4913 productTextArea5 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea5.Value"); 4914 productTextArea6 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea6.Value"); 4915 4916 productFeedingGuideImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.FeedingGuideImage.Value"); 4917 productNutrientTableImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NutrientTableImage.Value"); 4918 4919 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 4920 4921 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 4922 4923 if ( !string.IsNullOrEmpty(HttpContext.Current.Request["test"]) && HttpContext.Current.Request["test"] == "true" && !string.IsNullOrEmpty( product.GetString("Ecom:Product.Number") ) ) 4924 { 4925 dietDetails.Add(rangeNameSuperscripted, DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name)); 4926 dietFeedingGuides.Add(rangeNameSuperscripted, DietApi( "feedingguide", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name)); 4927 } 4928 } 4929 <div class="row e-product dvp-product-details"> 4930 <div class="col-12"> 4931 <div class="row"> 4932 <div class="col-12"> 4933 <h1 class="mb-1 font-weight-bold"> 4934 @rangeNameSuperscripted 4935 </h1> 4936 </div> 4937 </div> 4938 </div> 4939 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4"> 4940 <div class="row"> 4941 <div class="col-12"> 4942 <div class="e-product-image-container single-range"> 4943 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 4944 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")"> 4945 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 4946 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@productDisplayName" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0"> 4947 </div> 4948 4949 @for(int i = 0; i < images.Count(); i++) 4950 { 4951 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 4952 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@images[i]&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@productDisplayName" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="@(i + 1)"> 4953 </div> 4954 } 4955 </div> 4956 @if(images.Any()) 4957 { 4958 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a> 4959 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a> 4960 <ol class="carousel-indicators"> 4961 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 4962 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span> 4963 </li> 4964 @for(int i = 0; i < images.Count(); i++) 4965 { 4966 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)"> 4967 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@images[i]&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span> 4968 </li> 4969 } 4970 </ol> 4971 } 4972 </div> 4973 </div> 4974 </div> 4975 </div> 4976 </div> 4977 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3"> 4978 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span> 4979 @if(!string.IsNullOrEmpty(optionalName)) 4980 { 4981 <div class="row"> 4982 <div class="col-12"> 4983 <h2 class="mb-0">@displayNameSuperscripted</h2> 4984 </div> 4985 </div> 4986 } 4987 @if(!string.IsNullOrEmpty(productShortDescription)) 4988 { 4989 <div class="row"> 4990 <div class="col-12"> 4991 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")) 4992 </div> 4993 </div> 4994 } 4995 <div class="row"> 4996 <div class="col-12 mt-2 table-responsive"> 4997 <table class="table"> 4998 @if(!string.IsNullOrEmpty(productIngredients)) 4999 { 5000 <tr> 5001 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 5002 <td>@productIngredients</td> 5003 </tr> 5004 } 5005 @if(!string.IsNullOrEmpty(productRecommendation)) 5006 { 5007 <tr> 5008 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td> 5009 <td>@productRecommendation</td> 5010 </tr> 5011 } 5012 @if(!string.IsNullOrEmpty(productNotRecommendedFor)) 5013 { 5014 <tr> 5015 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td> 5016 <td>@productNotRecommendedFor</td> 5017 </tr> 5018 } 5019 @if(!string.IsNullOrEmpty(productPackSize)) 5020 { 5021 <tr> 5022 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 5023 <td>@productPackSize</td> 5024 </tr> 5025 } 5026 @if(!string.IsNullOrEmpty(productDatasheet)) 5027 { 5028 <tr> 5029 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 5030 <td> 5031 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet"> 5032 @Translate("Download","Download") <i class="material-icons">get_app</i> 5033 </a> 5034 </td> 5035 </tr> 5036 } 5037 5038 </table> 5039 </div> 5040 </div> 5041 @if(!hideRequestmoreinformation) 5042 { 5043 <div class="row"> 5044 <div class="col-12"> 5045 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 5046 @Translate("Request more information","Request more information") 5047 </button> 5048 </div> 5049 </div> 5050 } 5051 </div> 5052 @if ( dietDetails.Count == 0 ) 5053 { 5054 if ( !string.IsNullOrEmpty( productIcon1 ) && !string.IsNullOrEmpty( productTextArea1 ) ) 5055 { 5056 <div class="col-12 col-md-6"> 5057 <div class="row mb-2"> 5058 <div class="col-6 col-md-2"> 5059 <div style="background-color:@productColorCode;" class="rounded p-1"> 5060 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon1"/> 5061 </div> 5062 </div> 5063 <div class="col-12 col-md-10 d-flex align-items-center"> 5064 <p class="mb-0">@productTextArea1</p> 5065 </div> 5066 </div> 5067 </div> 5068 } 5069 if ( !string.IsNullOrEmpty( productIcon2 ) && !string.IsNullOrEmpty( productTextArea2 ) ) 5070 { 5071 <div class="col-12 col-md-6"> 5072 <div class="row mb-2"> 5073 <div class="col-6 col-md-2"> 5074 <div style="background-color:@productColorCode;" class="rounded p-1"> 5075 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon2"/> 5076 </div> 5077 </div> 5078 <div class="col-12 col-md-10 d-flex align-items-center"> 5079 <p class="mb-0">@productTextArea2</p> 5080 </div> 5081 </div> 5082 </div> 5083 } 5084 if ( !string.IsNullOrEmpty( productIcon3 ) && !string.IsNullOrEmpty( productTextArea3 ) ) 5085 { 5086 <div class="col-12 col-md-6"> 5087 <div class="row mb-2"> 5088 <div class="col-6 col-md-2"> 5089 <div style="background-color:@productColorCode;" class="rounded p-1"> 5090 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon3"/> 5091 </div> 5092 </div> 5093 <div class="col-12 col-md-10 d-flex align-items-center"> 5094 <p class="mb-0">@productTextArea3</p> 5095 </div> 5096 </div> 5097 </div> 5098 } 5099 if ( !string.IsNullOrEmpty( productIcon4 ) && !string.IsNullOrEmpty( productTextArea4 ) ) 5100 { 5101 <div class="col-12 col-md-6"> 5102 <div class="row mb-2"> 5103 <div class="col-6 col-md-2"> 5104 <div style="background-color:@productColorCode;" class="rounded p-1"> 5105 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon4"/> 5106 </div> 5107 </div> 5108 <div class="col-12 col-md-10 d-flex align-items-center"> 5109 <p class="mb-0">@productTextArea4</p> 5110 </div> 5111 </div> 5112 </div> 5113 } 5114 if ( !string.IsNullOrEmpty( productIcon5 ) && !string.IsNullOrEmpty( productTextArea5 ) ) 5115 { 5116 <div class="col-12 col-md-6"> 5117 <div class="row mb-2"> 5118 <div class="col-6 col-md-2"> 5119 <div style="background-color:@productColorCode;" class="rounded p-1"> 5120 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon5"/> 5121 </div> 5122 </div> 5123 <div class="col-12 col-md-10 d-flex align-items-center"> 5124 <p class="mb-0">@productTextArea5</p> 5125 </div> 5126 </div> 5127 </div> 5128 } 5129 if ( !string.IsNullOrEmpty( productIcon6 ) && !string.IsNullOrEmpty( productTextArea6 ) ) 5130 { 5131 <div class="col-12 col-md-6"> 5132 <div class="row mb-2"> 5133 <div class="col-6 col-md-2"> 5134 <div style="background-color:@productColorCode;" class="rounded p-1"> 5135 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon6"/> 5136 </div> 5137 </div> 5138 <div class="col-12 col-md-10 d-flex align-items-center"> 5139 <p class="mb-0">@productTextArea6</p> 5140 </div> 5141 </div> 5142 </div> 5143 } 5144 } 5145 </div> 5146 5147 if ( !string.IsNullOrEmpty( productFeedingGuideImage ) && string.IsNullOrEmpty(HttpContext.Current.Request["test"])) 5148 { 5149 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2"> 5150 <div class="row"> 5151 <div class="col-12 col-md-4"> 5152 <div class="e-product-section-header"> 5153 <h2 class="mb-1 mb-md-0">@Translate( "Feeding guide", "Feeding guide" )</h2> 5154 </div> 5155 </div> 5156 <div class="col-12 col-md-8"> 5157 <img src="@productFeedingGuideImage" class="p-img"/> 5158 </div> 5159 </div> 5160 </div> 5161 } 5162 if(!string.IsNullOrEmpty(productNutrientTableImage)) 5163 { 5164 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5165 <div class="row"> 5166 <div class="col-12 col-md-4"> 5167 <div class="e-product-section-header"> 5168 <h2 class="mb-1 mb-md-0">@Translate("Nutrient table","Nutrient table")</h2> 5169 </div> 5170 </div> 5171 <div class="col-12 col-md-8"> 5172 <img src="@productNutrientTableImage" class="p-img" /> 5173 </div> 5174 </div> 5175 </div> 5176 } 5177 } 5178 5179 if ( dietDetails.Count > 0 ) 5180 { 5181 int tabCounter = 0; 5182 5183 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 pt-2 pt-md-4 mt-2"> 5184 @if ( dietDetails.Count > 1 ) 5185 { 5186 int tabLinkCounter = 0; 5187 5188 <div class="row mb-3"> 5189 <div class="col-12"> 5190 <div class="list-group flex-column flex-md-row" style="background-color: @productColorCode;border-color: @productColorCode;" role="tablist"> 5191 @foreach ( KeyValuePair< string, dynamic > dietDetail in dietDetails ) 5192 { 5193 <a class="list-group-item list-group-item-action js-dvp-specific-diet-tabs dvp-specific-diet-tabs d-flex justify-content-between align-items-center@(tabLinkCounter == 0 ? " active" : "")" data-toggle="list" href="#tab-details-@(dietDetail.Key.Replace( " ", "-" ))" role="tab"> 5194 @dietDetail.Key 5195 <i class="material-icons d-block d-md-none">keyboard_arrow_right</i> 5196 <i class="material-icons d-none d-md-block">keyboard_arrow_down</i> 5197 </a> 5198 5199 tabLinkCounter++; 5200 } 5201 </div> 5202 </div> 5203 </div> 5204 } 5205 @foreach ( KeyValuePair<string, dynamic> dietDetail in dietDetails ) 5206 { 5207 if ( dietDetails.Count > 1 ) 5208 { 5209 if ( tabCounter == 0 ) 5210 { 5211 @:<div class="tab-content"> 5212 } 5213 @:<div class="tab-pane fade@(tabCounter == 0 ? " active show" : "")" id="tab-details-@dietDetail.Key.Replace(" ","-")" role="tabpanel"> 5214 @:<div class="row"> 5215 } 5216 else 5217 { 5218 @:<div class="row"> 5219 } 5220 foreach ( dynamic detail in dietDetail.Value ) 5221 { 5222 if ( detail.IconCssClass != null && detail.Description != null ) 5223 { 5224 <div class="col-12 col-md-6"> 5225 <div class="row mb-2"> 5226 <div class="col-6 col-md-2"> 5227 <div style="background-color:@productColorCode;" class="rounded text-center text-white"> 5228 <i class="dechra-details-icon dechra-icon-@detail.IconCssClass"></i> 5229 </div> 5230 </div> 5231 <div class="col-12 col-md-10 d-flex align-items-center"> 5232 <p class="mb-0">@detail.Description</p> 5233 </div> 5234 </div> 5235 </div> 5236 } 5237 } 5238 if ( dietDetails.Count > 1 ) 5239 { 5240 @:</div> 5241 @:</div> 5242 5243 tabCounter++; 5244 5245 if(tabCounter == dietDetails.Count) 5246 { 5247 @:</div> 5248 } 5249 } 5250 else 5251 { 5252 @:</div> 5253 } 5254 } 5255 </div> 5256 } 5257 5258 if ( dietFeedingGuides.Count > 0 ) 5259 { 5260 int tabCounter = 0; 5261 5262 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2"> 5263 <div class="row"> 5264 <div class="col-12 col-md-4"> 5265 @if ( dietFeedingGuides.Count > 1 ) 5266 { 5267 int tabLinkCounter = 0; 5268 5269 <div class="list-group mb-3" style="background-color: @productColorCode;border-color: @productColorCode;" role="tablist"> 5270 @foreach ( KeyValuePair< string, dynamic > dietFeedingGuide in dietFeedingGuides ) 5271 { 5272 <a class="list-group-item list-group-item-action js-dvp-specific-diet-tabs dvp-specific-diet-tabs d-flex justify-content-between align-items-center@(tabLinkCounter == 0 ? " active" : "")" data-toggle="list" href="#tab-feeding-@(dietFeedingGuide.Key.Replace( " ", "-" ))" role="tab"> 5273 @dietFeedingGuide.Key 5274 <i class="material-icons">keyboard_arrow_right</i> 5275 </a> 5276 5277 tabLinkCounter++; 5278 } 5279 </div> 5280 } 5281 else 5282 { 5283 foreach ( KeyValuePair< string, dynamic > dietFeedingGuide in dietFeedingGuides ) 5284 { 5285 foreach ( dynamic guide in dietFeedingGuide.Value ) 5286 { 5287 <div class="e-product-section-header"> 5288 <h2 class="mb-1 mb-md-0">@guide.Name</h2> 5289 </div> 5290 } 5291 } 5292 } 5293 </div> 5294 <div class="col-12 col-md-8"> 5295 @foreach ( KeyValuePair<string, dynamic> dietFeedingGuide in dietFeedingGuides ) 5296 { 5297 foreach ( dynamic guide in dietFeedingGuide.Value ) 5298 { 5299 if ( dietFeedingGuides.Count > 1 ) 5300 { 5301 if ( tabCounter == 0 ) 5302 { 5303 @:<div class="tab-content"> 5304 } 5305 @:<div class="tab-pane fade@(tabCounter == 0 ? " active show" : "")" id="tab-feeding-@dietFeedingGuide.Key.Replace(" ","-")" role="tabpanel"> 5306 <p class="mb-0 h3 text-center">@guide.Name</p> 5307 <p class="mb-1 mt-0 h4 text-center">@dietFeedingGuide.Key</p> 5308 } 5309 <table class="table table-condensed border"> 5310 <thead> 5311 <tr> 5312 @foreach ( dynamic th in guide.Headers ) 5313 { 5314 <th style="background: @productColorCode" class="text-center text-white"> 5315 <img class="p-img" src="@th.Icon" alt="@th.Header"> 5316 <br> 5317 @th.Header 5318 </th> 5319 } 5320 </tr> 5321 </thead> 5322 <tbody> 5323 @foreach ( dynamic tr in guide.Rows ) 5324 { 5325 <tr> 5326 @foreach ( dynamic td in tr.Row ) 5327 { 5328 <td class="text-center"> 5329 @td.Value 5330 </td> 5331 } 5332 </tr> 5333 } 5334 </tbody> 5335 </table> 5336 5337 if ( dietFeedingGuides.Count > 1 ) 5338 { 5339 @:</div> 5340 5341 tabCounter++; 5342 5343 if(tabCounter == dietFeedingGuides.Count) 5344 { 5345 @:</div> 5346 } 5347 } 5348 } 5349 } 5350 </div> 5351 </div> 5352 </div> 5353 } 5354 5355 int productPanelsItemId = 0; 5356 5357 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId)) 5358 { 5359 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId); 5360 5361 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId"> 5362 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations) 5363 { 5364 string productPanelNameValue = productPanel.GetValue<string>("Name"); 5365 5366 if(productPanelNameValue == "Premium Content") 5367 { 5368 <div class="col-12" id="js-dvp-product-premium-content"> 5369 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5370 <div class="row"> 5371 <div class="col-12 is-loading"> 5372 <div class="e-loading-spinner"></div> 5373 </div> 5374 </div> 5375 </div> 5376 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template"> 5377 <div class="js-dvp-product-premium-content-animate fade"> 5378 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5379 <div class="row"> 5380 <div class="col-12 col-md-4"> 5381 <div class="e-product-section-header"> 5382 <h2 class="mb-1 mb-md-0"> 5383 @Translate("Premium Content","Premium Content") 5384 </h2> 5385 </div> 5386 </div> 5387 <div class="col-12 col-md-8 mt-half"> 5388 {{#each premiumPages}} 5389 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 5390 <div class="col-12 col-md-6"> 5391 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 5392 </div> 5393 <div class="col-12 col-md-6"> 5394 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 5395 <p>{{searchFriendlyDescription}}</p> 5396 <p> 5397 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}"> 5398 {{searchFriendlyButtonText}} 5399 </a> 5400 </p> 5401 </div> 5402 </div> 5403 {{/each}} 5404 </div> 5405 </div> 5406 </div> 5407 </div> 5408 </script> 5409 </div> 5410 } 5411 else if(productPanelNameValue == "Supportmaterials for vets") 5412 { 5413 <div class="col-12" id="js-dvp-product-supportmaterials-vets"> 5414 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5415 <div class="row"> 5416 <div class="col-12 is-loading"> 5417 <div class="e-loading-spinner"></div> 5418 </div> 5419 </div> 5420 </div> 5421 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template"> 5422 <div class="js-dvp-product-supportmaterials-vets-animate fade"> 5423 {{#if vetSupportmaterials.items}} 5424 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5425 <div class="row"> 5426 {{#if vetSupportmaterials.display}} 5427 <div class="col-12 col-md-4"> 5428 <div class="e-product-section-header"> 5429 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2> 5430 </div> 5431 </div> 5432 <div class="col-12 col-md-8 mt-half"> 5433 {{#each vetSupportmaterials.items}} 5434 5435 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-vet-supportmaterials-{{categoryId}}"> 5436 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 5437 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 5438 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 5439 </p> 5440 5441 <div class="row"> 5442 <div class="col-12"> 5443 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}"> 5444 <div class="row"> 5445 <div class="col-12 pl-md-3"> 5446 <div class="row"> 5447 {{#each materials}} 5448 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 5449 <div class="row"> 5450 <div class="col-12 col-md-6 text-center"> 5451 {{#if download}} 5452 {{#if loginToDownload}} 5453 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 5454 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5455 </a> 5456 {{else}} 5457 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 5458 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5459 </a> 5460 {{/if}} 5461 {{else}} 5462 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5463 {{/if}} 5464 </div> 5465 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 5466 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 5467 5468 {{#if loginToDownload}} 5469 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 5470 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download") 5471 </a> 5472 {{else}} 5473 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 5474 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 5475 </a> 5476 {{/if}} 5477 5478 @if(shopIsActive && hasAccess) 5479 { 5480 @:{{#if orderable}} 5481 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 5482 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 5483 <input type="hidden" name="CartCmd" value="Add"> 5484 <input type="hidden" name="ProductID" value="{{id}}"> 5485 <input type="hidden" name="VariantID" value=""> 5486 <input type="hidden" name="UnitID" value=""> 5487 <input type="hidden" name="Redirect" value="false"> 5488 <input type="hidden" name="Quantity" value="1"> 5489 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 5490 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 5491 </form> 5492 @:{{/if}} 5493 } 5494 </div> 5495 </div> 5496 </div> 5497 {{/each}} 5498 </div> 5499 </div> 5500 </div> 5501 </div> 5502 </div> 5503 </div> 5504 {{/each}} 5505 </div> 5506 {{else}} 5507 <div class="col-12 text-center"> 5508 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for vets are intended for healthcare professionals only.","These support materials for vets are intended for healthcare professionals only.")</p> 5509 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 5510 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 5511 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 5512 </div> 5513 {{/if}} 5514 </div> 5515 </div> 5516 {{/if}} 5517 </div> 5518 </script> 5519 5520 </div> 5521 } 5522 else if(productPanelNameValue == "Supportmaterials for pet owners") 5523 { 5524 <div class="col-12" id="js-dvp-product-supportmaterials-clients"> 5525 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5526 <div class="row"> 5527 <div class="col-12 is-loading"> 5528 <div class="e-loading-spinner"></div> 5529 </div> 5530 </div> 5531 </div> 5532 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template"> 5533 <div class="js-dvp-product-supportmaterials-clients-animate fade"> 5534 {{#if clientSupportmaterials.items}} 5535 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5536 <div class="row"> 5537 {{#if clientSupportmaterials.display}} 5538 <div class="col-12 col-md-4"> 5539 <div class="e-product-section-header"> 5540 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2> 5541 </div> 5542 </div> 5543 <div class="col-12 col-md-8 mt-half"> 5544 {{#each clientSupportmaterials.items}} 5545 5546 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-client-supportmaterials-{{categoryId}}"> 5547 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 5548 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 5549 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 5550 </p> 5551 5552 <div class="row"> 5553 <div class="col-12"> 5554 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}"> 5555 <div class="row"> 5556 <div class="col-12 pl-md-3"> 5557 <div class="row"> 5558 {{#each materials}} 5559 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 5560 <div class="row"> 5561 <div class="col-12 col-md-6 text-center"> 5562 {{#if download}} 5563 {{#if loginToDownload}} 5564 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 5565 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5566 </a> 5567 {{else}} 5568 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 5569 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5570 </a> 5571 {{/if}} 5572 {{else}} 5573 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5574 {{/if}} 5575 </div> 5576 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 5577 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 5578 {{#if download}} 5579 <p class="mb-1"> 5580 {{#if loginToDownload}} 5581 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")</a> 5582 {{else}} 5583 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 5584 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 5585 </a> 5586 {{/if}} 5587 </p> 5588 {{/if}} 5589 5590 @if(shopIsActive && hasAccess) 5591 { 5592 @:{{#if orderable}} 5593 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 5594 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 5595 <input type="hidden" name="CartCmd" value="Add"> 5596 <input type="hidden" name="ProductID" value="{{id}}"> 5597 <input type="hidden" name="VariantID" value=""> 5598 <input type="hidden" name="UnitID" value=""> 5599 <input type="hidden" name="Redirect" value="false"> 5600 <input type="hidden" name="Quantity" value="1"> 5601 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 5602 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 5603 </form> 5604 @:{{/if}} 5605 } 5606 5607 </div> 5608 </div> 5609 </div> 5610 {{/each}} 5611 </div> 5612 </div> 5613 </div> 5614 </div> 5615 </div> 5616 </div> 5617 {{/each}} 5618 </div> 5619 {{else}} 5620 <div class="col-12 text-center"> 5621 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for petowners are intended for healthcare professionals only.","These support materials for petowners are intended for healthcare professionals only.")</p> 5622 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 5623 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 5624 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 5625 </div> 5626 {{/if}} 5627 </div> 5628 </div> 5629 {{/if}} 5630 </div> 5631 </script> 5632 5633 </div> 5634 } 5635 else if(productPanelNameValue == "Videos") 5636 { 5637 <div class="col-12" id="js-dvp-product-videos"> 5638 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5639 <div class="row"> 5640 <div class="col-12 is-loading"> 5641 <div class="e-loading-spinner"></div> 5642 </div> 5643 </div> 5644 </div> 5645 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template"> 5646 <div class="js-dvp-product-videos-animate fade"> 5647 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5648 <div class="row"> 5649 {{#if display}} 5650 <div class="col-12 col-md-4"> 5651 <div class="e-product-section-header"> 5652 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2> 5653 </div> 5654 </div> 5655 <div class="col-12 col-md-8 mt-half"> 5656 {{#compare totalVideoCount '>' 4}} 5657 <div class="collapse-peek"> 5658 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos"> 5659 {{/compare}} 5660 <div class="row"> 5661 {{#each videos}} 5662 {{#each videos}} 5663 <div class="col-12 col-md-6"> 5664 <a href="javascript:void(0);" title="{{embedTitle}}" class="js-dvp-video-modal js-dvp-product-details-tracking-video-popup" data-tracking-title="{{embedTitle}}" data-tracking-range-name="@rangeName" data-tracking-url="{{{embedUrl}}}"> 5665 <div> 5666 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" /> 5667 <p class="text-center mt-1 mb-3">{{embedTitle}}</p> 5668 </div> 5669 </a> 5670 <sc{{handlebarHack}}ript type="application/json"> 5671 { 5672 "url":"{{../url}}", 5673 "header":"{{embedTitle}}", 5674 "embedUrl":"{{{embedUrl}}}" 5675 } 5676 </sc{{handlebarHack}}ript> 5677 </div> 5678 {{/each}} 5679 {{/each}} 5680 </div> 5681 {{#compare totalVideoCount '>' 4}} 5682 </div> 5683 <div class="collapse-peek-toggle"> 5684 <div class="row"> 5685 <div class="col-12 mx-auto text-center"> 5686 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos"> 5687 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span> 5688 </a> 5689 </div> 5690 </div> 5691 </div> 5692 {{/compare}} 5693 </div> 5694 </div> 5695 {{else}} 5696 <div class="col-12 text-center"> 5697 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related videos","Please sign in to access our related videos")</p> 5698 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p> 5699 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 5700 </div> 5701 {{/if}} 5702 </div> 5703 </div> 5704 </div> 5705 </script> 5706 </div> 5707 } 5708 else if(productPanelNameValue == "Related ranges") 5709 { 5710 <div class="col-12"> 5711 @if( GetLoop("RelatedRanges").Count() > 0 ) 5712 { 5713 string relatedProductsHeader = Translate("Other related products","Other related products"); 5714 5715 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value"))) 5716 { 5717 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value"); 5718 } 5719 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5720 <div class="row"> 5721 <div class="col-12 col-md-4"> 5722 <div class="e-product-section-header"> 5723 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2> 5724 </div> 5725 </div> 5726 <div class="col-12 col-md-8 mt-half dvp-ranges-list"> 5727 <div class="row"> 5728 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges")) 5729 { 5730 string relatedRangeGroupId = ""; 5731 5732 int relatedProductInt = 0; 5733 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count(); 5734 string relatedRangeName = relatedRange.GetString("Range"); 5735 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>"); 5736 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-"); 5737 5738 <div class="col-12 col-lg-6 mb-3"> 5739 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")"> 5740 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3> 5741 </div> 5742 <div class="col-12 px-1 pt-1 border dvp-range"> 5743 <div> 5744 <div class="row"> 5745 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange")) 5746 { 5747 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId; 5748 5749 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage"); 5750 5751 if(relatedProductInt == 2) 5752 { 5753 @:</div> 5754 @:</div> 5755 @:<div class="collapse" id="range-@relatedRangeNameCleaned"> 5756 @:<div class="row"> 5757 } 5758 5759 string relatedUrl = string.Empty; 5760 5761 string relatedUrlFriendlyProduct = string.Empty; 5762 5763 string relatedProductName = product.GetString("Ecom:Product.Name"); 5764 5765 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName"); 5766 5767 string relatedProductDisplayName = relatedProductName; 5768 string relatedProductTitleName = relatedProductName; 5769 5770 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 5771 { 5772 if(hideRelatedProductName) 5773 { 5774 relatedProductDisplayName = relatedRangeNameSuperscripted; 5775 relatedProductTitleName = relatedRangeName; 5776 } 5777 else 5778 { 5779 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName; 5780 relatedProductTitleName = relatedRangeName + " " + relatedProductName; 5781 } 5782 } 5783 5784 if(product.GetBoolean("Ecom:Product:Field.IsDiets")) 5785 { 5786 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 5787 } 5788 else 5789 { 5790 relatedUrl = relatedProductName; 5791 } 5792 5793 if(relatedProductsInRangeCount > 1) 5794 { 5795 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-"); 5796 } 5797 5798 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 5799 5800 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct; 5801 5802 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center"> 5803 <a href="@relatedProductUrl" title="@relatedProductTitleName"> 5804 <div class="row"> 5805 <div class="col-12 dvp-image-container"> 5806 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@relatedProductImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@relatedProductTitleName"> 5807 </div> 5808 <div class="col-12"> 5809 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p> 5810 </div> 5811 </div> 5812 </a> 5813 </div> 5814 5815 relatedProductInt++; 5816 } 5817 </div> 5818 </div> 5819 <div class="row mt-1 dvp-view-more-products"> 5820 @if(relatedProductsInRangeCount > 2) 5821 { 5822 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2; 5823 5824 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products"); 5825 5826 if(relatedProductsInRangeCount == 3 ) 5827 { 5828 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product"); 5829 } 5830 5831 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString()); 5832 5833 <div class="col-12"> 5834 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more"> 5835 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@relatedRangeNameCleaned" aria-expanded="false" aria-controls="range-@relatedRangeNameCleaned" href="javascript:void(0);"> 5836 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span> 5837 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span> 5838 </a> 5839 </p> 5840 </div> 5841 } 5842 </div> 5843 </div> 5844 </div> 5845 } 5846 </div> 5847 </div> 5848 </div> 5849 </div> 5850 } 5851 </div> 5852 } 5853 else if(productPanelNameValue == "Newsletter") 5854 { 5855 <div class="col-12"> 5856 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5857 <div class="row"> 5858 <div class="col-12 col-md-4"> 5859 <div class="e-product-section-header"> 5860 <h2 class="mb-1 mb-md-0">Newsletter</h2> 5861 </div> 5862 </div> 5863 <div class="col-12 col-md-8"> 5864 <div class="dvp-newsletter-signup-form"> 5865 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide"> 5866 <div class="form-group"> 5867 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label> 5868 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter"> 5869 </div> 5870 <div class="form-group"> 5871 <button type="submit" class="btn btn-primary">Sign up</button> 5872 </div> 5873 </form> 5874 </div> 5875 </div> 5876 </div> 5877 </div> 5878 </div> 5879 } 5880 else if(productPanelNameValue == "eLearning") 5881 { 5882 <div class="col-12" id="js-dvp-product-elearning"> 5883 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5884 <div class="row"> 5885 <div class="col-12 is-loading"> 5886 <div class="e-loading-spinner"></div> 5887 </div> 5888 </div> 5889 </div> 5890 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template"> 5891 <div class="js-dvp-product-elearning-animate fade"> 5892 {{#if elearning.items}} 5893 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5894 <div class="row"> 5895 <div class="col-12 col-md-4"> 5896 <div class="e-product-section-header"> 5897 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2> 5898 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" /> 5899 </div> 5900 </div> 5901 <div class="col-12 col-md-8"> 5902 <h3> 5903 {{elearning.items.0.courseAmountText}} 5904 </h3> 5905 <div class="row"> 5906 <div class="col-12"> 5907 <div class="list-group"> 5908 {{#if elearning.display}} 5909 {{#each elearning.items.0.courses}} 5910 <a class="px-2 list-group-item list-group-item-action js-dvp-product-details-tracking-elearning-click" href="{{url}}" target="_blank" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 5911 <b>{{name}}</b> 5912 </a> 5913 {{/each}} 5914 {{else}} 5915 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p> 5916 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 5917 {{/if}} 5918 </div> 5919 </div> 5920 </div> 5921 {{#unless elearning.display}} 5922 <div class="row mt-2"> 5923 <div class="col-12"> 5924 <div class="bg-academy"> 5925 <div class="row p-2"> 5926 @{ 5927 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString(); 5928 } 5929 <div class="col-12"> 5930 <h3 class="text-white mb-1">@Translate("Don't have an account on our free eLearning platform for vets?","Don't have an account on our free eLearning platform for vets?")</h3> 5931 </div> 5932 <div class="col-12 col-md-8 text-white"> 5933 <ul class="mb-0"> 5934 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li> 5935 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li> 5936 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li> 5937 </ul> 5938 </div> 5939 <div class="col-12 col-md-4 pt-2"> 5940 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p> 5941 </div> 5942 </div> 5943 </div> 5944 </div> 5945 </div> 5946 {{/unless}} 5947 </div> 5948 </div> 5949 </div> 5950 {{/if}} 5951 </div> 5952 </script> 5953 </div> 5954 } 5955 else if(productPanelNameValue == "Product Websites") 5956 { 5957 <div class="col-12" id="js-dvp-product-websites"> 5958 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5959 <div class="row"> 5960 <div class="col-12 is-loading"> 5961 <div class="e-loading-spinner"></div> 5962 </div> 5963 </div> 5964 </div> 5965 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template"> 5966 <div class="js-dvp-product-websites-animate fade"> 5967 {{#if websites.items}} 5968 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5969 <div class="row"> 5970 {{#if websites.display}} 5971 <div class="col-12 col-md-4"> 5972 <div class="e-product-section-header"> 5973 <h2 class="mb-1 mb-md-0"> 5974 {{#compare count '>' 1}} 5975 @Translate("Product Websites","Product Websites") 5976 {{else}} 5977 @Translate("Product Website","Product Website") 5978 {{/compare}} 5979 </h2> 5980 </div> 5981 </div> 5982 <div class="col-12 col-md-8 mt-half"> 5983 {{#each websites.items.0.website}} 5984 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 5985 <div class="col-12 col-md-6"> 5986 <p class="lead"> 5987 {{name}} 5988 </p> 5989 <p> 5990 <a class="btn btn-primary js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 5991 @Translate("Go to website","Go to website") 5992 </a> 5993 </p> 5994 </div> 5995 <div class="col-12 col-md-6"> 5996 <a class="js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 5997 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" /> 5998 </a> 5999 </div> 6000 </div> 6001 {{/each}} 6002 </div> 6003 {{else}} 6004 <div class="col-12 text-center"> 6005 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our product websites","Please sign in to access our product websites")</p> 6006 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p> 6007 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 6008 </div> 6009 {{/if}} 6010 </div> 6011 </div> 6012 {{/if}} 6013 </div> 6014 </script> 6015 </div> 6016 } 6017 else if(productPanelNameValue == "Previous Premium Content") 6018 { 6019 <div class="col-12" id="js-dvp-product-previous-premium-content"> 6020 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6021 <div class="row"> 6022 <div class="col-12 is-loading"> 6023 <div class="e-loading-spinner"></div> 6024 </div> 6025 </div> 6026 </div> 6027 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template"> 6028 <div class="js-dvp-product-previous-premium-content-animate fade"> 6029 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6030 <div class="row"> 6031 <div class="col-12 col-md-4"> 6032 <div class="e-product-section-header"> 6033 <h2 class="mb-1 mb-md-0"> 6034 @Translate("Previous Premium Content","Premium Content") 6035 </h2> 6036 </div> 6037 </div> 6038 <div class="col-12 col-md-8 mt-half"> 6039 {{#each premiumPages}} 6040 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 6041 <div class="col-12 col-md-6"> 6042 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 6043 </div> 6044 <div class="col-12 col-md-6"> 6045 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 6046 <p>{{searchFriendlyDescription}}</p> 6047 <p> 6048 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}"> 6049 {{searchFriendlyButtonText}} 6050 </a> 6051 </p> 6052 </div> 6053 </div> 6054 {{/each}} 6055 </div> 6056 </div> 6057 </div> 6058 </div> 6059 </script> 6060 </div> 6061 } 6062 else if(productPanelNameValue == "Frequent Treatment Questions") 6063 { 6064 <div class="col-12" id="js-dvp-product-faq"> 6065 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6066 <div class="row"> 6067 <div class="col-12 is-loading"> 6068 <div class="e-loading-spinner"></div> 6069 </div> 6070 </div> 6071 </div> 6072 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template"> 6073 <div class="js-dvp-product-faq-animate fade"> 6074 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6075 <div class="row"> 6076 {{#if display}} 6077 <div class="col-12 col-md-4"> 6078 <div class="e-product-section-header"> 6079 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2> 6080 </div> 6081 </div> 6082 <div class="col-12 col-md-8 mt-half dvp-faq"> 6083 {{# faqs}} 6084 {{#each faq}} 6085 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}"> 6086 <div class="row"> 6087 <div class="col-12"> 6088 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}"> 6089 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 6090 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 6091 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small> 6092 </h3> 6093 </div> 6094 </div> 6095 <div class="row"> 6096 <div class="col-12"> 6097 <div class="collapse" id="collapse-{{paragraphId}}"> 6098 <div class="row"> 6099 <div class="col-12 pl-3"> 6100 {{#each faqList}} 6101 <div class="row"> 6102 <div class="col-12 mt-1"> 6103 <a href="javascript:void(0);" class="js-dvp-faq-modal js-dvp-product-details-tracking-faq-popup" data-tracking-title="{{listHeader}}" data-tracking-category-name="{{../categoryName}}" data-tracking-range-name="@rangeName" data-tracking-url="{{../../url}}"> 6104 {{listHeader}} 6105 </a> 6106 <sc{{handlebarHack}}ript type="application/json"> 6107 { 6108 "url":"{{../../url}}", 6109 "categoryName": "{{../categoryName}}", 6110 "header":"{{listHeader}}", 6111 "content":"{{{listContent}}}" 6112 } 6113 </sc{{handlebarHack}}ript> 6114 </div> 6115 </div> 6116 {{/each}} 6117 </div> 6118 </div> 6119 </div> 6120 </div> 6121 </div> 6122 </div> 6123 {{/each}} 6124 {{/faqs}} 6125 6126 {{#each accordions}} 6127 <div class="p col-12 p-accordion" id="{{paragraphID}}"> 6128 {{#if introText}} 6129 <div class="p-accordion-lead"> 6130 {{{introText}}} 6131 </div> 6132 {{/if}} 6133 <div class="p-accordion-container "> 6134 {{#each accordionItems}} 6135 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 "> 6136 <div class="p-accordion-toggle"> 6137 <p data-toggle="collapse" data-target="#e-accordion-{{../paragraphId}}-{{id}}" class="px-2 py-1 d-flex align-items-center m-0 justify-content-between collapsed" aria-expanded="false"> 6138 <span class="p-accordion-toggle-text mb-0 line-height-sm none"> 6139 {{heading}} 6140 </span> 6141 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i> 6142 </p> 6143 </div> 6144 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse"> 6145 <div class="px-2 pb-1 p-accordion-content"> 6146 <div class="p-txt-container dvp-rich-text-content pt-1"> 6147 {{{text}}} 6148 </div> 6149 </div> 6150 </div> 6151 </div> 6152 {{/each}} 6153 </div> 6154 </div> 6155 {{/each}} 6156 6157 6158 </div> 6159 {{else}} 6160 <div class="col-12 text-center"> 6161 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related FAQs","Please sign in to access our related FAQs")</p> 6162 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p> 6163 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 6164 </div> 6165 {{/if}} 6166 </div> 6167 </div> 6168 </div> 6169 </script> 6170 </div> 6171 } 6172 else if(productPanelNameValue == "Got More Questions form") 6173 { 6174 <div class="col-12 js-dvp-product-details-more-info-section"> 6175 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6176 <div class="row"> 6177 <div class="col-12 col-md-4"> 6178 <div class="e-product-section-header"> 6179 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2> 6180 </div> 6181 </div> 6182 <div class="p col-12 col-md-8 mt-half"> 6183 @{ 6184 int currentPageId; 6185 6186 int.TryParse(pageId, out currentPageId); 6187 6188 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph; 6189 6190 int currentParagraphId = currentParagraph.GlobalRecordParagraphID; 6191 6192 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString(); 6193 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString(); 6194 6195 int formPageId; 6196 int formParagraphId; 6197 6198 int.TryParse(formPageIdString, out formPageId); 6199 int.TryParse(formParagraphIdString, out formParagraphId); 6200 6201 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId); 6202 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId); 6203 6204 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView); 6205 6206 } 6207 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString) 6208 </div> 6209 </div> 6210 </div> 6211 </div> 6212 } 6213 } 6214 </div> 6215 } 6216 6217 } 6218 else if(productType.GetBoolean("Ecom:Product:Field.IsPharma")) 6219 { 6220 string rangeName = range.GetString("Range"); 6221 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>"); 6222 string rangeId = string.Empty; 6223 string therapyAreaId = string.Empty; 6224 string therapyAreaName = string.Empty; 6225 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 6226 string optionalName = string.Empty; 6227 string displayName = string.Empty; 6228 string displayNameSuperscripted = string.Empty; 6229 string groupId = string.Empty; 6230 string productName = string.Empty; 6231 string productDisplayName = string.Empty; 6232 string urlFriendlyProductName = string.Empty; 6233 string productShortDescription = string.Empty; 6234 string productShortDescriptionJSON = string.Empty; 6235 string productActives = string.Empty; 6236 string productActivesJSON = string.Empty; 6237 string productPackSize = string.Empty; 6238 string productWithdrawalPeriod = string.Empty; 6239 string productDatasheet = string.Empty; 6240 string productPackInsert = string.Empty; 6241 string productSPC = string.Empty; 6242 string productMSDS = string.Empty; 6243 bool hasDocuments = true; 6244 string productDisclaimer = string.Empty; 6245 string productDisclaimerJSON = string.Empty; 6246 string productImage = string.Empty; 6247 string productUrl = string.Empty; 6248 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts"); 6249 6250 if(productsInRangeCount > 1) 6251 { 6252 <div class="row"> 6253 <div class="col-12 col-md-6 mb-md-3 pr-sm-3"> 6254 <h1 class="mb-1 font-weight-bold"> 6255 @rangeNameSuperscripted 6256 </h1> 6257 @foreach(LoopItem product in range.GetLoop("ProductsInRange")) 6258 { 6259 6260 groupId = product.GetString("Ecom:Group.ID"); 6261 6262 productName = product.GetString("Ecom:Product.Name"); 6263 productDisplayName = productName; 6264 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-"); 6265 6266 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 6267 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 6268 6269 optionalName = product.GetString("Ecom:Product:Field.OptionalName"); 6270 6271 if(!string.IsNullOrEmpty(optionalName)) 6272 { 6273 displayName = optionalName; 6274 displayNameSuperscripted = optionalName.Replace("®","<sup>®</sup>"); 6275 } 6276 else 6277 { 6278 displayName = rangeName; 6279 displayNameSuperscripted = rangeNameSuperscripted; 6280 } 6281 6282 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 6283 { 6284 productDisplayName = displayNameSuperscripted + " " + productName; 6285 } 6286 6287 rangeId = "0"; 6288 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value"))) 6289 { 6290 rangeId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value"); 6291 } 6292 6293 therapyAreaId = "0"; 6294 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value"))) 6295 { 6296 therapyAreaId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value"); 6297 } 6298 6299 therapyAreaName = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.OptionLabel"); 6300 6301 productActives = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.ingredients.Value"); 6302 productActivesJSON = WebUtility.HtmlDecode(Regex.Replace(productActives, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 6303 6304 productPackSize = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packetsize.OptionLabel").Replace(",",", "); 6305 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.withdrawalperiod.Value"); 6306 6307 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.datasheet.Value"); 6308 productPackInsert = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packinsert.Value"); 6309 productSPC = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.spc.Value"); 6310 productMSDS = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.msds.Value"); 6311 6312 hasDocuments = true; 6313 6314 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 6315 { 6316 hasDocuments = false; 6317 } 6318 6319 productDisclaimer = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.disclaimer.Value"); 6320 productDisclaimerJSON = WebUtility.HtmlDecode(Regex.Replace(productDisclaimer, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 6321 6322 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 6323 productUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + groupId + "#" + urlFriendlyProductName; 6324 6325 <a class="js-dvp-product-list-details" href="@productUrl" title="@displayName - @productName" data-productname="@urlFriendlyProductName"> 6326 <div class="row px-sm-1 my-2 my-sm-0"> 6327 <div class="dvp-product-list-details col-12 p-sm-1 py-1"> 6328 <div class="row"> 6329 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container"> 6330 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=200&amp;Quality=75" alt="@productDisplayName"> 6331 </div> 6332 <div class="col-9 col-sm-8 px-sm-2 my-auto"> 6333 <p class="mb-0"> 6334 @if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 6335 { 6336 <b>@productDisplayName</b> 6337 } 6338 else 6339 { 6340 <b class="h3">@displayNameSuperscripted</b> 6341 <br> @productDisplayName 6342 } 6343 </p> 6344 </div> 6345 <div class="col-2 d-none d-sm-block my-auto text-center"> 6346 <i class="material-icons material-icons-4x">keyboard_arrow_right</i> 6347 </div> 6348 </div> 6349 <script type="application/json" class="@urlFriendlyProductName"> 6350 { 6351 "Name":"@productDisplayName", 6352 "ShortDescription":"@productShortDescriptionJSON", 6353 "Image":"@productImage", 6354 "Actives":"@productActivesJSON", 6355 "PackSize":"@productPackSize", 6356 "WithdrawalPeriod":"@productWithdrawalPeriod", 6357 "Datasheet":"@productDatasheet", 6358 "PackInsert":"@productPackInsert", 6359 "SPC":"@productSPC", 6360 "MSDS":"@productMSDS", 6361 "HasDocuments":"@hasDocuments", 6362 "Disclaimer":"@productDisclaimerJSON" 6363 } 6364 </script> 6365 </div> 6366 </div> 6367 </a> 6368 } 6369 </div> 6370 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-4 pb-4 mt-sm-0 pl-sm-3 align-self-center dvp-product-details"> 6371 <div class="js-dvp-product-details-animate fade"> 6372 <div class="row"> 6373 <div class="col-12"> 6374 <div class="e-product-image-container dvp-product-details-image-container text-center"> 6375 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="dvp-product-details-image" alt="@productDisplayName"> 6376 </div> 6377 </div> 6378 </div> 6379 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 6380 { 6381 <div class="row"> 6382 <div class="col-12"> 6383 @productShortDescriptionJSON 6384 </div> 6385 </div> 6386 } 6387 <div class="row"> 6388 <div class="col-12 mt-2 table-responsive"> 6389 <table class="table"> 6390 @if(!string.IsNullOrEmpty(productActives)) 6391 { 6392 <tr> 6393 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 6394 <td>@productActives</td> 6395 </tr> 6396 } 6397 @if(!string.IsNullOrEmpty(productPackSize)) 6398 { 6399 <tr> 6400 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 6401 <td>@productPackSize</td> 6402 </tr> 6403 } 6404 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 6405 { 6406 <tr> 6407 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 6408 <td>@productWithdrawalPeriod</td> 6409 </tr> 6410 } 6411 @if(hasDocuments) 6412 { 6413 <tr> 6414 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 6415 <td> 6416 @if(!string.IsNullOrEmpty(productDatasheet)) 6417 { 6418 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productDatasheet">@Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i></a> 6419 } 6420 @if(!string.IsNullOrEmpty(productPackInsert)) 6421 { 6422 <a target="_blank" class="btn btn-sm btn-primary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productPackInsert">@Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i></a> 6423 } 6424 @if(!string.IsNullOrEmpty(productSPC)) 6425 { 6426 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productSPC">@Translate("SPC","SPC") <i class="material-icons">get_app</i></a> 6427 } 6428 @if(!string.IsNullOrEmpty(productMSDS)) 6429 { 6430 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block" href="@productMSDS">@Translate("MSDS","MSDS") <i class="material-icons">get_app</i></a> 6431 } 6432 </td> 6433 </tr> 6434 } 6435 </table> 6436 </div> 6437 </div> 6438 @if(!string.IsNullOrEmpty(productDisclaimer)) 6439 { 6440 <div class="row"> 6441 <div class="col-12"> 6442 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 6443 <small> 6444 @productDisclaimer 6445 </small> 6446 </div> 6447 </div> 6448 } 6449 @if(!hideRequestmoreinformation) 6450 { 6451 <div class="row"> 6452 <div class="col-12"> 6453 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button> 6454 </div> 6455 </div> 6456 } 6457 </div> 6458 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template"> 6459 <div class="js-dvp-product-details-animate fade"> 6460 6461 <div class="e-product-image-container dvp-product-details-image-container text-center"> 6462 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image={{Image}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="dvp-product-details-image" alt="{{Name}}"> 6463 </div> 6464 {{#if ShortDescription}} 6465 <div class="dvp-short-description"> 6466 {{{ShortDescription}}} 6467 </div> 6468 {{/if}} 6469 <div class="row"> 6470 <div class="col-12 mt-2 table-responsive"> 6471 <table class="table"> 6472 {{#if Actives}} 6473 <tr> 6474 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 6475 <td>{{{Actives}}}</td> 6476 </tr> 6477 {{/if}} 6478 {{#if PackSize}} 6479 <tr> 6480 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 6481 <td>{{PackSize}}</td> 6482 </tr> 6483 {{/if}} 6484 {{#if WithdrawalPeriod}} 6485 <tr> 6486 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 6487 <td>{{{WithdrawalPeriod}}}</td> 6488 </tr> 6489 {{/if}} 6490 {{#compare HasDocuments '===' 'True'}} 6491 <tr> 6492 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 6493 <td> 6494 {{#if Datasheet}} 6495 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="{{Datasheet}}">@Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i></a> 6496 {{/if}} 6497 {{#if PackInsert}} 6498 <a target="_blank" class="btn btn-sm btn-primary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="{{PackInsert}}">@Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i></a> 6499 {{/if}} 6500 {{#if SPC}} 6501 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="{{SPC}}">@Translate("SPC","SPC") <i class="material-icons">get_app</i></a> 6502 {{/if}} 6503 {{#if MSDS}} 6504 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block" href="{{MSDS}}">@Translate("MSDS","MSDS") <i class="material-icons">get_app</i></a> 6505 {{/if}} 6506 </td> 6507 </tr> 6508 {{/compare}} 6509 </table> 6510 </div> 6511 </div> 6512 {{#if Disclaimer}} 6513 <div class="row mt-1"> 6514 <div class="col-12"> 6515 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 6516 <small> 6517 {{{Disclaimer}}} 6518 </small> 6519 </div> 6520 </div> 6521 {{/if}} 6522 @if(!hideRequestmoreinformation) 6523 { 6524 <div class="row"> 6525 <div class="col-12"> 6526 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button> 6527 </div> 6528 </div> 6529 } 6530 </div> 6531 </script> 6532 </div> 6533 </div> 6534 } 6535 else 6536 { 6537 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 6538 { 6539 6540 groupId = product.GetString("Ecom:Group.ID"); 6541 6542 productName = product.GetString("Ecom:Product.Name"); 6543 6544 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 6545 6546 optionalName = product.GetString("Ecom:Product:Field.OptionalName"); 6547 6548 if(!string.IsNullOrEmpty(optionalName)) 6549 { 6550 displayName = optionalName; 6551 displayNameSuperscripted = optionalName.Replace("®","<sup>®</sup>"); 6552 } 6553 6554 rangeId = "0"; 6555 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value"))) 6556 { 6557 rangeId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value"); 6558 } 6559 6560 therapyAreaId = "0"; 6561 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value"))) 6562 { 6563 therapyAreaId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value"); 6564 } 6565 6566 therapyAreaName = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.OptionLabel"); 6567 6568 productActives = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.ingredients.Value"); 6569 productPackSize = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packetsize.OptionLabel").Replace(",",", ");; 6570 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.withdrawalperiod.Value"); 6571 6572 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.datasheet.Value"); 6573 productPackInsert = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packinsert.Value"); 6574 productSPC = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.spc.Value"); 6575 productMSDS = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.msds.Value"); 6576 6577 hasDocuments = true; 6578 6579 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 6580 { 6581 hasDocuments = false; 6582 } 6583 6584 productDisclaimer = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.disclaimer.Value"); 6585 6586 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 6587 } 6588 <div class="row dvp-product-details"> 6589 <div class="col-12"> 6590 <div class="row"> 6591 <div class="col-12"> 6592 <h1 class="mb-1 font-weight-bold"> 6593 @rangeNameSuperscripted 6594 </h1> 6595 </div> 6596 </div> 6597 </div> 6598 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4"> 6599 <div class="row"> 6600 <div class="col-12"> 6601 <div class="e-product-image-container dvp-product-details-image-container text-center"> 6602 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="dvp-product-details-image" alt="@productName"> 6603 </div> 6604 </div> 6605 </div> 6606 </div> 6607 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-4 pb-4 mt-sm-0 pl-sm-3"> 6608 @if(!string.IsNullOrEmpty(optionalName)) 6609 { 6610 <div class="row"> 6611 <div class="col-12"> 6612 <h2 class="mb-0">@displayNameSuperscripted</h2> 6613 </div> 6614 </div> 6615 } 6616 @if(!string.IsNullOrEmpty(productShortDescription)) 6617 { 6618 <div class="row"> 6619 <div class="col-12"> 6620 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")) 6621 </div> 6622 </div> 6623 } 6624 <div class="row"> 6625 <div class="col-12 mt-2 table-responsive"> 6626 <table class="table"> 6627 @if(!string.IsNullOrEmpty(productActives)) 6628 { 6629 <tr> 6630 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 6631 <td>@productActives</td> 6632 </tr> 6633 } 6634 @if(!string.IsNullOrEmpty(productPackSize)) 6635 { 6636 <tr> 6637 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 6638 <td>@productPackSize</td> 6639 </tr> 6640 } 6641 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 6642 { 6643 <tr> 6644 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 6645 <td>@productWithdrawalPeriod</td> 6646 </tr> 6647 } 6648 @if(hasDocuments) 6649 { 6650 <tr> 6651 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 6652 <td> 6653 @if(!string.IsNullOrEmpty(productDatasheet)) 6654 { 6655 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productDatasheet">@Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i></a> 6656 } 6657 @if(!string.IsNullOrEmpty(productPackInsert)) 6658 { 6659 <a target="_blank" class="btn btn-sm btn-primary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productPackInsert">@Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i></a> 6660 } 6661 @if(!string.IsNullOrEmpty(productSPC)) 6662 { 6663 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productSPC">@Translate("SPC","SPC") <i class="material-icons">get_app</i></a> 6664 } 6665 @if(!string.IsNullOrEmpty(productMSDS)) 6666 { 6667 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block" href="@productMSDS">@Translate("MSDS","MSDS") <i class="material-icons">get_app</i></a> 6668 } 6669 </td> 6670 </tr> 6671 } 6672 </table> 6673 </div> 6674 </div> 6675 @if(!string.IsNullOrEmpty(productDisclaimer)) 6676 { 6677 <div class="row mt-1"> 6678 <div class="col-12"> 6679 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 6680 <small> 6681 @productDisclaimer 6682 </small> 6683 </div> 6684 </div> 6685 } 6686 @if(!hideRequestmoreinformation) 6687 { 6688 <div class="row"> 6689 <div class="col-12"> 6690 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button> 6691 </div> 6692 </div> 6693 } 6694 </div> 6695 </div> 6696 } 6697 6698 int productPanelsItemId = 0; 6699 6700 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId)) 6701 { 6702 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId); 6703 6704 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId"> 6705 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations) 6706 { 6707 string productPanelNameValue = productPanel.GetValue<string>("Name"); 6708 6709 if(productPanelNameValue == "Supportmaterials for vets") 6710 { 6711 <div class="col-12" id="js-dvp-product-supportmaterials-vets"> 6712 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6713 <div class="row"> 6714 <div class="col-12 is-loading"> 6715 <div class="e-loading-spinner"></div> 6716 </div> 6717 </div> 6718 </div> 6719 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template"> 6720 <div class="js-dvp-product-supportmaterials-vets-animate fade"> 6721 {{#if vetSupportmaterials.items}} 6722 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6723 <div class="row"> 6724 {{#if vetSupportmaterials.display}} 6725 <div class="col-12 col-md-4"> 6726 <div class="e-product-section-header"> 6727 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2> 6728 </div> 6729 </div> 6730 <div class="col-12 col-md-8 mt-half"> 6731 {{#each vetSupportmaterials.items}} 6732 6733 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-vet-supportmaterials-{{categoryId}}"> 6734 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 6735 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 6736 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 6737 </p> 6738 6739 <div class="row"> 6740 <div class="col-12"> 6741 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}"> 6742 <div class="row"> 6743 <div class="col-12 pl-md-3"> 6744 <div class="row"> 6745 {{#each materials}} 6746 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 6747 <div class="row"> 6748 <div class="col-12 col-md-6 text-center"> 6749 {{#if download}} 6750 {{#if loginToDownload}} 6751 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 6752 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6753 </a> 6754 {{else}} 6755 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 6756 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6757 </a> 6758 {{/if}} 6759 {{else}} 6760 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6761 {{/if}} 6762 </div> 6763 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 6764 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 6765 6766 {{#if loginToDownload}} 6767 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 6768 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download") 6769 </a> 6770 {{else}} 6771 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 6772 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 6773 </a> 6774 {{/if}} 6775 6776 @if(shopIsActive && hasAccess) 6777 { 6778 @:{{#if orderable}} 6779 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 6780 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 6781 <input type="hidden" name="CartCmd" value="Add"> 6782 <input type="hidden" name="ProductID" value="{{id}}"> 6783 <input type="hidden" name="VariantID" value=""> 6784 <input type="hidden" name="UnitID" value=""> 6785 <input type="hidden" name="Redirect" value="false"> 6786 <input type="hidden" name="Quantity" value="1"> 6787 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 6788 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 6789 </form> 6790 @:{{/if}} 6791 } 6792 </div> 6793 </div> 6794 </div> 6795 {{/each}} 6796 </div> 6797 </div> 6798 </div> 6799 </div> 6800 </div> 6801 </div> 6802 {{/each}} 6803 </div> 6804 {{else}} 6805 <div class="col-12 text-center"> 6806 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for vets are intended for healthcare professionals only.","These support materials for vets are intended for healthcare professionals only.")</p> 6807 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 6808 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 6809 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 6810 </div> 6811 {{/if}} 6812 </div> 6813 </div> 6814 {{/if}} 6815 </div> 6816 </script> 6817 6818 </div> 6819 } 6820 else if(productPanelNameValue == "Supportmaterials for pet owners") 6821 { 6822 <div class="col-12" id="js-dvp-product-supportmaterials-clients"> 6823 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6824 <div class="row"> 6825 <div class="col-12 is-loading"> 6826 <div class="e-loading-spinner"></div> 6827 </div> 6828 </div> 6829 </div> 6830 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template"> 6831 <div class="js-dvp-product-supportmaterials-clients-animate fade"> 6832 {{#if clientSupportmaterials.items}} 6833 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6834 <div class="row"> 6835 {{#if clientSupportmaterials.display}} 6836 <div class="col-12 col-md-4"> 6837 <div class="e-product-section-header"> 6838 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2> 6839 </div> 6840 </div> 6841 <div class="col-12 col-md-8 mt-half"> 6842 {{#each clientSupportmaterials.items}} 6843 6844 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-client-supportmaterials-{{categoryId}}"> 6845 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 6846 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 6847 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 6848 </p> 6849 6850 <div class="row"> 6851 <div class="col-12"> 6852 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}"> 6853 <div class="row"> 6854 <div class="col-12 pl-md-3"> 6855 <div class="row"> 6856 {{#each materials}} 6857 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 6858 <div class="row"> 6859 <div class="col-12 col-md-6 text-center"> 6860 {{#if download}} 6861 {{#if loginToDownload}} 6862 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 6863 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6864 </a> 6865 {{else}} 6866 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 6867 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6868 </a> 6869 {{/if}} 6870 {{else}} 6871 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6872 {{/if}} 6873 </div> 6874 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 6875 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 6876 {{#if download}} 6877 <p class="mb-1"> 6878 {{#if loginToDownload}} 6879 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")</a> 6880 {{else}} 6881 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 6882 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 6883 </a> 6884 {{/if}} 6885 </p> 6886 {{/if}} 6887 6888 @if(shopIsActive && hasAccess) 6889 { 6890 @:{{#if orderable}} 6891 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 6892 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 6893 <input type="hidden" name="CartCmd" value="Add"> 6894 <input type="hidden" name="ProductID" value="{{id}}"> 6895 <input type="hidden" name="VariantID" value=""> 6896 <input type="hidden" name="UnitID" value=""> 6897 <input type="hidden" name="Redirect" value="false"> 6898 <input type="hidden" name="Quantity" value="1"> 6899 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 6900 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 6901 </form> 6902 @:{{/if}} 6903 } 6904 6905 </div> 6906 </div> 6907 </div> 6908 {{/each}} 6909 </div> 6910 </div> 6911 </div> 6912 </div> 6913 </div> 6914 </div> 6915 {{/each}} 6916 </div> 6917 {{else}} 6918 <div class="col-12 text-center"> 6919 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for petowners are intended for healthcare professionals only.","These support materials for petowners are intended for healthcare professionals only.")</p> 6920 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 6921 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 6922 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 6923 </div> 6924 {{/if}} 6925 </div> 6926 </div> 6927 {{/if}} 6928 </div> 6929 </script> 6930 6931 </div> 6932 } 6933 else if(productPanelNameValue == "Videos") 6934 { 6935 <div class="col-12" id="js-dvp-product-videos"> 6936 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6937 <div class="row"> 6938 <div class="col-12 is-loading"> 6939 <div class="e-loading-spinner"></div> 6940 </div> 6941 </div> 6942 </div> 6943 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template"> 6944 <div class="js-dvp-product-videos-animate fade"> 6945 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6946 <div class="row"> 6947 {{#if display}} 6948 <div class="col-12 col-md-4"> 6949 <div class="e-product-section-header"> 6950 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2> 6951 </div> 6952 </div> 6953 <div class="col-12 col-md-8 mt-half"> 6954 {{#compare totalVideoCount '>' 4}} 6955 <div class="collapse-peek"> 6956 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos"> 6957 {{/compare}} 6958 <div class="row"> 6959 {{#each videos}} 6960 {{#each videos}} 6961 <div class="col-12 col-md-6"> 6962 <a href="javascript:void(0);" title="{{embedTitle}}" class="js-dvp-video-modal js-dvp-product-details-tracking-video-popup" data-tracking-title="{{embedTitle}}" data-tracking-range-name="@rangeName" data-tracking-url="{{{embedUrl}}}"> 6963 <div> 6964 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" /> 6965 <p class="text-center mt-1 mb-3">{{embedTitle}}</p> 6966 </div> 6967 </a> 6968 <sc{{handlebarHack}}ript type="application/json"> 6969 { 6970 "url":"{{../url}}", 6971 "header":"{{embedTitle}}", 6972 "embedUrl":"{{{embedUrl}}}" 6973 } 6974 </sc{{handlebarHack}}ript> 6975 </div> 6976 {{/each}} 6977 {{/each}} 6978 </div> 6979 {{#compare totalVideoCount '>' 4}} 6980 </div> 6981 <div class="collapse-peek-toggle"> 6982 <div class="row"> 6983 <div class="col-12 mx-auto text-center"> 6984 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos"> 6985 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span> 6986 </a> 6987 </div> 6988 </div> 6989 </div> 6990 {{/compare}} 6991 </div> 6992 </div> 6993 {{else}} 6994 <div class="col-12 text-center"> 6995 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related videos","Please sign in to access our related videos")</p> 6996 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p> 6997 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 6998 </div> 6999 {{/if}} 7000 </div> 7001 </div> 7002 </div> 7003 </script> 7004 </div> 7005 } 7006 else if(productPanelNameValue == "Related ranges") 7007 { 7008 <div class="col-12"> 7009 @if( GetLoop("RelatedRanges").Count() > 0 ) 7010 { 7011 string relatedProductsHeader = Translate("Other related products","Other related products"); 7012 7013 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value"))) 7014 { 7015 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value"); 7016 } 7017 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7018 <div class="row"> 7019 <div class="col-12 col-md-4"> 7020 <div class="e-product-section-header"> 7021 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2> 7022 </div> 7023 </div> 7024 <div class="col-12 col-md-8 mt-half dvp-ranges-list"> 7025 <div class="row"> 7026 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges")) 7027 { 7028 string relatedRangeGroupId = ""; 7029 7030 int relatedProductInt = 0; 7031 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count(); 7032 string relatedRangeName = relatedRange.GetString("Range"); 7033 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>"); 7034 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-"); 7035 7036 <div class="col-12 col-lg-6 mb-3"> 7037 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")"> 7038 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3> 7039 </div> 7040 <div class="col-12 px-1 pt-1 border dvp-range"> 7041 <div> 7042 <div class="row"> 7043 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange")) 7044 { 7045 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId; 7046 7047 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage"); 7048 7049 if(relatedProductInt == 2) 7050 { 7051 @:</div> 7052 @:</div> 7053 @:<div class="collapse" id="range-@relatedRangeNameCleaned"> 7054 @:<div class="row"> 7055 } 7056 7057 string relatedUrl = string.Empty; 7058 7059 string relatedUrlFriendlyProduct = string.Empty; 7060 7061 string relatedProductName = product.GetString("Ecom:Product.Name"); 7062 7063 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName"); 7064 7065 string relatedProductDisplayName = relatedProductName; 7066 string relatedProductTitleName = relatedProductName; 7067 7068 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 7069 { 7070 if(hideRelatedProductName) 7071 { 7072 relatedProductDisplayName = relatedRangeNameSuperscripted; 7073 relatedProductTitleName = relatedRangeName; 7074 } 7075 else 7076 { 7077 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName; 7078 relatedProductTitleName = relatedRangeName + " " + relatedProductName; 7079 } 7080 } 7081 7082 if(product.GetBoolean("Ecom:Product:Field.IsDiets")) 7083 { 7084 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 7085 } 7086 else 7087 { 7088 relatedUrl = relatedProductName; 7089 } 7090 7091 if(relatedProductsInRangeCount > 1) 7092 { 7093 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-"); 7094 } 7095 7096 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 7097 7098 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct; 7099 7100 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center"> 7101 <a href="@relatedProductUrl" title="@relatedProductTitleName"> 7102 <div class="row"> 7103 <div class="col-12 dvp-image-container"> 7104 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@relatedProductImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@relatedProductTitleName"> 7105 </div> 7106 <div class="col-12"> 7107 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p> 7108 </div> 7109 </div> 7110 </a> 7111 </div> 7112 7113 relatedProductInt++; 7114 } 7115 </div> 7116 </div> 7117 <div class="row mt-1 dvp-view-more-products"> 7118 @if(relatedProductsInRangeCount > 2) 7119 { 7120 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2; 7121 7122 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products"); 7123 7124 if(relatedProductsInRangeCount == 3 ) 7125 { 7126 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product"); 7127 } 7128 7129 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString()); 7130 7131 <div class="col-12"> 7132 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more"> 7133 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@relatedRangeNameCleaned" aria-expanded="false" aria-controls="range-@relatedRangeNameCleaned" href="javascript:void(0);"> 7134 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span> 7135 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span> 7136 </a> 7137 </p> 7138 </div> 7139 } 7140 </div> 7141 </div> 7142 </div> 7143 } 7144 </div> 7145 </div> 7146 </div> 7147 </div> 7148 } 7149 </div> 7150 } 7151 else if(productPanelNameValue == "Newsletter") 7152 { 7153 <div class="col-12"> 7154 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7155 <div class="row"> 7156 <div class="col-12 col-md-4"> 7157 <div class="e-product-section-header"> 7158 <h2 class="mb-1 mb-md-0">Newsletter</h2> 7159 </div> 7160 </div> 7161 <div class="col-12 col-md-8"> 7162 <div class="dvp-newsletter-signup-form"> 7163 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide"> 7164 <div class="form-group"> 7165 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label> 7166 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter"> 7167 </div> 7168 <div class="form-group"> 7169 <button type="submit" class="btn btn-primary">Sign up</button> 7170 </div> 7171 </form> 7172 </div> 7173 </div> 7174 </div> 7175 </div> 7176 </div> 7177 } 7178 else if(productPanelNameValue == "eLearning") 7179 { 7180 <div class="col-12" id="js-dvp-product-elearning"> 7181 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7182 <div class="row"> 7183 <div class="col-12 is-loading"> 7184 <div class="e-loading-spinner"></div> 7185 </div> 7186 </div> 7187 </div> 7188 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template"> 7189 <div class="js-dvp-product-elearning-animate fade"> 7190 {{#if elearning.items}} 7191 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7192 <div class="row"> 7193 <div class="col-12 col-md-4"> 7194 <div class="e-product-section-header"> 7195 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2> 7196 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" /> 7197 </div> 7198 </div> 7199 <div class="col-12 col-md-8"> 7200 <h3> 7201 {{elearning.items.0.courseAmountText}} 7202 </h3> 7203 <div class="row"> 7204 <div class="col-12"> 7205 <div class="list-group"> 7206 {{#if elearning.display}} 7207 {{#each elearning.items.0.courses}} 7208 <a class="px-2 list-group-item list-group-item-action js-dvp-product-details-tracking-elearning-click" href="{{url}}" target="_blank" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 7209 <b>{{name}}</b> 7210 </a> 7211 {{/each}} 7212 {{else}} 7213 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p> 7214 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 7215 {{/if}} 7216 </div> 7217 </div> 7218 </div> 7219 {{#unless elearning.display}} 7220 <div class="row mt-2"> 7221 <div class="col-12"> 7222 <div class="bg-academy"> 7223 <div class="row p-2"> 7224 @{ 7225 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString(); 7226 } 7227 <div class="col-12"> 7228 <h3 class="text-white mb-1">@Translate("Don't have an account on our free eLearning platform for vets?","Don't have an account on our free eLearning platform for vets?")</h3> 7229 </div> 7230 <div class="col-12 col-md-8 text-white"> 7231 <ul class="mb-0"> 7232 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li> 7233 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li> 7234 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li> 7235 </ul> 7236 </div> 7237 <div class="col-12 col-md-4 pt-2"> 7238 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p> 7239 </div> 7240 </div> 7241 </div> 7242 </div> 7243 </div> 7244 {{/unless}} 7245 </div> 7246 </div> 7247 </div> 7248 {{/if}} 7249 </div> 7250 </script> 7251 </div> 7252 } 7253 else if(productPanelNameValue == "Product Websites") 7254 { 7255 <div class="col-12" id="js-dvp-product-websites"> 7256 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7257 <div class="row"> 7258 <div class="col-12 is-loading"> 7259 <div class="e-loading-spinner"></div> 7260 </div> 7261 </div> 7262 </div> 7263 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template"> 7264 <div class="js-dvp-product-websites-animate fade"> 7265 {{#if websites.items}} 7266 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7267 <div class="row"> 7268 {{#if websites.display}} 7269 <div class="col-12 col-md-4"> 7270 <div class="e-product-section-header"> 7271 <h2 class="mb-1 mb-md-0"> 7272 {{#compare count '>' 1}} 7273 @Translate("Product Websites","Product Websites") 7274 {{else}} 7275 @Translate("Product Website","Product Website") 7276 {{/compare}} 7277 </h2> 7278 </div> 7279 </div> 7280 <div class="col-12 col-md-8 mt-half"> 7281 {{#each websites.items.0.website}} 7282 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 7283 <div class="col-12 col-md-6"> 7284 <p class="lead"> 7285 {{name}} 7286 </p> 7287 <p> 7288 <a class="btn btn-primary js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 7289 @Translate("Go to website","Go to website") 7290 </a> 7291 </p> 7292 </div> 7293 <div class="col-12 col-md-6"> 7294 <a class="js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 7295 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" /> 7296 </a> 7297 </div> 7298 </div> 7299 {{/each}} 7300 </div> 7301 {{else}} 7302 <div class="col-12 text-center"> 7303 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our product websites","Please sign in to access our product websites")</p> 7304 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p> 7305 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 7306 </div> 7307 {{/if}} 7308 </div> 7309 </div> 7310 {{/if}} 7311 </div> 7312 </script> 7313 </div> 7314 } 7315 else if(productPanelNameValue == "Frequent Treatment Questions") 7316 { 7317 <div class="col-12" id="js-dvp-product-faq"> 7318 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7319 <div class="row"> 7320 <div class="col-12 is-loading"> 7321 <div class="e-loading-spinner"></div> 7322 </div> 7323 </div> 7324 </div> 7325 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template"> 7326 <div class="js-dvp-product-faq-animate fade"> 7327 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7328 <div class="row"> 7329 {{#if display}} 7330 <div class="col-12 col-md-4"> 7331 <div class="e-product-section-header"> 7332 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2> 7333 </div> 7334 </div> 7335 <div class="col-12 col-md-8 mt-half dvp-faq"> 7336 {{# faqs}} 7337 {{#each faq}} 7338 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}"> 7339 <div class="row"> 7340 <div class="col-12"> 7341 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}"> 7342 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 7343 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 7344 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small> 7345 </h3> 7346 </div> 7347 </div> 7348 <div class="row"> 7349 <div class="col-12"> 7350 <div class="collapse" id="collapse-{{paragraphId}}"> 7351 <div class="row"> 7352 <div class="col-12 pl-3"> 7353 {{#each faqList}} 7354 <div class="row"> 7355 <div class="col-12 mt-1"> 7356 <a href="javascript:void(0);" class="js-dvp-faq-modal js-dvp-product-details-tracking-faq-popup" data-tracking-title="{{listHeader}}" data-tracking-category-name="{{../categoryName}}" data-tracking-range-name="@rangeName" data-tracking-url="{{../../url}}"> 7357 {{listHeader}} 7358 </a> 7359 <sc{{handlebarHack}}ript type="application/json"> 7360 { 7361 "url":"{{../../url}}", 7362 "categoryName": "{{../categoryName}}", 7363 "header":"{{listHeader}}", 7364 "content":"{{{listContent}}}" 7365 } 7366 </sc{{handlebarHack}}ript> 7367 </div> 7368 </div> 7369 {{/each}} 7370 </div> 7371 </div> 7372 </div> 7373 </div> 7374 </div> 7375 </div> 7376 {{/each}} 7377 {{/faqs}} 7378 7379 {{#each accordions}} 7380 <div class="p col-12 p-accordion" id="{{paragraphID}}"> 7381 {{#if introText}} 7382 <div class="p-accordion-lead"> 7383 {{{introText}}} 7384 </div> 7385 {{/if}} 7386 <div class="p-accordion-container "> 7387 {{#each accordionItems}} 7388 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 "> 7389 <div class="p-accordion-toggle"> 7390 <p data-toggle="collapse" data-target="#e-accordion-{{../paragraphId}}-{{id}}" class="px-2 py-1 d-flex align-items-center m-0 justify-content-between collapsed" aria-expanded="false"> 7391 <span class="p-accordion-toggle-text mb-0 line-height-sm none"> 7392 {{heading}} 7393 </span> 7394 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i> 7395 </p> 7396 </div> 7397 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse"> 7398 <div class="px-2 pb-1 p-accordion-content"> 7399 <div class="p-txt-container dvp-rich-text-content pt-1"> 7400 {{{text}}} 7401 </div> 7402 </div> 7403 </div> 7404 </div> 7405 {{/each}} 7406 </div> 7407 </div> 7408 {{/each}} 7409 7410 7411 </div> 7412 {{else}} 7413 <div class="col-12 text-center"> 7414 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related FAQs","Please sign in to access our related FAQs")</p> 7415 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p> 7416 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 7417 </div> 7418 {{/if}} 7419 </div> 7420 </div> 7421 </div> 7422 </script> 7423 </div> 7424 } 7425 else if(productPanelNameValue == "Got More Questions form") 7426 { 7427 <div class="col-12 js-dvp-product-details-more-info-section"> 7428 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7429 <div class="row"> 7430 <div class="col-12 col-md-4"> 7431 <div class="e-product-section-header"> 7432 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2> 7433 </div> 7434 </div> 7435 <div class="p col-12 col-md-8 mt-half"> 7436 @{ 7437 int currentPageId; 7438 7439 int.TryParse(pageId, out currentPageId); 7440 7441 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph; 7442 7443 int currentParagraphId = currentParagraph.GlobalRecordParagraphID; 7444 7445 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString(); 7446 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString(); 7447 7448 int formPageId; 7449 int formParagraphId; 7450 7451 int.TryParse(formPageIdString, out formPageId); 7452 int.TryParse(formParagraphIdString, out formParagraphId); 7453 7454 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId); 7455 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId); 7456 7457 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView); 7458 7459 } 7460 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString) 7461 </div> 7462 </div> 7463 </div> 7464 </div> 7465 } 7466 } 7467 </div> 7468 } 7469 } 7470 else if(productType.GetBoolean("Ecom:Product:Field.IsDiets")) 7471 { 7472 string rangeName = range.GetString("Range"); 7473 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 7474 string groupId = string.Empty; 7475 string productName = string.Empty; 7476 string publicProductCode = string.Empty; 7477 string urlFriendlyProductName = string.Empty; 7478 string productShortDescription = string.Empty; 7479 string productShortDescriptionJSON = string.Empty; 7480 string productIngredients = string.Empty; 7481 string productIngredientsJSON = string.Empty; 7482 string productPackSize = string.Empty; 7483 string productDatasheet = string.Empty; 7484 string productImage = string.Empty; 7485 string productUrl = string.Empty; 7486 7487 if(productsInRangeCount > 1) 7488 { 7489 <div class="col-12 col-sm-6 pr-sm-3"> 7490 <h1 class="mb-1 font-weight-bold"> 7491 @rangeName 7492 </h1> 7493 @foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 7494 { 7495 7496 groupId = product.GetString("Ecom:Group.ID"); 7497 7498 productName = product.GetString("Ecom:Product.Name"); 7499 7500 publicProductCode = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 7501 7502 urlFriendlyProductName = Regex.Replace(publicProductCode, @"[^A-Za-z0-9_\~]+", "-"); 7503 7504 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 7505 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 7506 7507 productIngredients = product.GetString("Ecom:Product.CategoryField.dechradiets.ingredients.Value"); 7508 productIngredientsJSON = Regex.Replace(productIngredients, @"\t|\n|\r", " "); 7509 7510 productPackSize = product.GetString("Ecom:Product.CategoryField.dechradiets.packetsize.Value"); 7511 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechradiets.datasheet.Value"); 7512 7513 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 7514 productUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + groupId + "#" + urlFriendlyProductName; 7515 7516 <a class="js-dvp-product-list-details" href="@productUrl" title="@rangeName - @productName" data-productname="@urlFriendlyProductName"> 7517 <div class="row px-sm-1"> 7518 <div class="dvp-product-list-details col-12 p-sm-1"> 7519 <div class="row"> 7520 <div class="col-3 col-sm-2 my-auto text-center"> 7521 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=200&amp;Quality=75" class="p-img" alt="@productName"> 7522 </div> 7523 <div class="col-9 col-sm-8 px-sm-2 my-auto"> 7524 <p class="mb-0"><b class="h3">@rangeName</b><br> @productName</p> 7525 </div> 7526 <div class="col-2 d-none d-sm-block my-auto text-center"> 7527 <i class="material-icons material-icons-5x">keyboard_arrow_right</i> 7528 </div> 7529 </div> 7530 <script type="application/json" class="@urlFriendlyProductName"> 7531 { 7532 "Name":"@productName", 7533 "ShortDescription":"@productShortDescriptionJSON", 7534 "Image":"@productImage", 7535 "Ingredients":"@productIngredientsJSON", 7536 "PackSize":"@productPackSize", 7537 "Datasheet":"@productDatasheet" 7538 } 7539 </script> 7540 </div> 7541 </div> 7542 </a> 7543 } 7544 </div> 7545 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-4 mt-sm-0 pl-sm-3 align-self-center dvp-details"> 7546 <div class="js-dvp-product-details-animate fade"> 7547 <div class="row"> 7548 <div class="col-12"> 7549 <div class="e-product-image-container"> 7550 <div class="e-product-image-wrapper text-center"> 7551 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="p-img" alt="@productName"> 7552 </div> 7553 </div> 7554 </div> 7555 </div> 7556 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 7557 { 7558 <div class="row"> 7559 <div class="col-12"> 7560 @productShortDescriptionJSON 7561 </div> 7562 </div> 7563 } 7564 <div class="row"> 7565 <div class="col-12 mt-2 table-responsive"> 7566 <table class="table"> 7567 @if(!string.IsNullOrEmpty(productIngredientsJSON)) 7568 { 7569 <tr> 7570 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 7571 <td>@productIngredientsJSON</td> 7572 </tr> 7573 } 7574 @if(!string.IsNullOrEmpty(productPackSize)) 7575 { 7576 <tr> 7577 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 7578 <td>@productPackSize</td> 7579 </tr> 7580 } 7581 @if(!string.IsNullOrEmpty(productDatasheet)) 7582 { 7583 <tr> 7584 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 7585 <td><a target="_blank" class="btn btn-sm btn-primary mr-1" href="@productDatasheet">@Translate("Download","Download") <i class="material-icons">get_app</i></a></td> 7586 </tr> 7587 } 7588 </table> 7589 </div> 7590 </div> 7591 </div> 7592 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template"> 7593 <div class="js-dvp-product-details-animate fade dvp-details"> 7594 <div class="row"> 7595 <div class="col-12"> 7596 <div class="e-product-image-container"> 7597 <div class="e-product-image-wrapper text-center"> 7598 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image={{Image}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="p-img" alt="{{Name}}"> 7599 </div> 7600 </div> 7601 </div> 7602 </div> 7603 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 7604 { 7605 <div class="row"> 7606 <div class="col-12"> 7607 {{{ShortDescription}}} 7608 </div> 7609 </div> 7610 } 7611 <div class="row"> 7612 <div class="col-12 mt-2 table-responsive"> 7613 <table class="table"> 7614 @if(!string.IsNullOrEmpty(productIngredientsJSON)) 7615 { 7616 <tr> 7617 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 7618 <td>{{Ingredients}}</td> 7619 </tr> 7620 } 7621 @if(!string.IsNullOrEmpty(productPackSize)) 7622 { 7623 <tr> 7624 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 7625 <td>{{PackSize}}</td> 7626 </tr> 7627 } 7628 @if(!string.IsNullOrEmpty(productDatasheet)) 7629 { 7630 <tr> 7631 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 7632 <td><a target="_blank" class="btn btn-sm btn-primary mr-1" href="{{Datasheet}}">@Translate("Download","Download") <i class="material-icons">get_app</i></a></td> 7633 </tr> 7634 } 7635 </table> 7636 </div> 7637 </div> 7638 </div> 7639 </script> 7640 </div> 7641 } 7642 else 7643 { 7644 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 7645 { 7646 groupId = product.GetString("Ecom:Group.ID"); 7647 7648 productName = product.GetString("Ecom:Product.Name"); 7649 7650 publicProductCode = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 7651 7652 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 7653 7654 productIngredients = product.GetString("Ecom:Product.CategoryField.dechradiets.ingredients.Value"); 7655 productPackSize = product.GetString("Ecom:Product.CategoryField.dechradiets.packetsize.Value"); 7656 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechradiets.datasheet.Value"); 7657 7658 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 7659 } 7660 <div class="col-12"> 7661 <div class="row"> 7662 <div class="col-12"> 7663 <h1 class="mb-1 font-weight-bold"> 7664 @rangeName 7665 </h1> 7666 </div> 7667 </div> 7668 </div> 7669 <div class="col-12 col-sm-6 pr-sm-3"> 7670 <div class="row"> 7671 <div class="col-12"> 7672 <div class="e-product-image-container"> 7673 <div class="e-product-image-wrapper text-center"> 7674 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="p-img" alt="@productName"> 7675 </div> 7676 </div> 7677 </div> 7678 </div> 7679 </div> 7680 <div class="col-12 col-sm-6 mt-4 mt-sm-0 pl-sm-3"> 7681 @if(!string.IsNullOrEmpty(productShortDescription)) 7682 { 7683 <div class="row"> 7684 <div class="col-12"> 7685 @productShortDescription 7686 </div> 7687 </div> 7688 } 7689 <div class="row"> 7690 <div class="col-12 mt-2 table-responsive"> 7691 <table class="table"> 7692 @if(!string.IsNullOrEmpty(productIngredients)) 7693 { 7694 <tr> 7695 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 7696 <td>@productIngredients</td> 7697 </tr> 7698 } 7699 @if(!string.IsNullOrEmpty(productPackSize)) 7700 { 7701 <tr> 7702 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 7703 <td>@productPackSize</td> 7704 </tr> 7705 } 7706 @if(!string.IsNullOrEmpty(productDatasheet)) 7707 { 7708 <tr> 7709 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 7710 <td><a target="_blank" class="btn btn-sm btn-secondary" href="@productDatasheet">@Translate("Download","Download") <i class="material-icons">get_app</i></a></td> 7711 </tr> 7712 } 7713 </table> 7714 </div> 7715 </div> 7716 </div> 7717 } 7718 7719 <div class="col-12" id="js-dvp-product-supportmaterials"> 7720 <div class="e-product-section border mt-2 py-4 border-left-0 border-right-0"> 7721 <div class="row"> 7722 <div class="col-12 is-loading"> 7723 <div class="e-loading-spinner"></div> 7724 </div> 7725 </div> 7726 </div> 7727 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials" type="text/x-handlebars-template"> 7728 <div class="js-dvp-product-supportmaterials-animate fade"> 7729 <div class="e-product-section border mt-2 py-4 border-left-0 border-right-0 border-bottom-0"> 7730 <div class="row"> 7731 <div class="col-12 col-md-4"> 7732 <div class="e-product-section-header"> 7733 <h2 class="m-a-0">@Translate("Supplementary Materials","Supplementary Materials")</h2> 7734 </div> 7735 </div> 7736 <div class="col-12 col-md-8 mt-half"> 7737 {{#each supportmaterials}} 7738 <div class="row pb-1"> 7739 <div class="col-12"> 7740 <p class="collapsed mb-1 font-weight-bold dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-supportmaterials-{{categoryId}}"> 7741 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 7742 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 7743 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 7744 </p> 7745 </div> 7746 </div> 7747 <div class="row"> 7748 <div class="col-12"> 7749 <div class="collapse" id="collapse-details-supportmaterials-{{categoryId}}"> 7750 <div class="row"> 7751 <div class="col-12 pl-3 pb-2"> 7752 <div class="row border border-top-0 border-right-0 border-left-0"> 7753 {{#each materials}} 7754 <div class="col-12 col-md-6 py-2"> 7755 <div class="row"> 7756 <div class="col-12 col-md-6 text-center"> 7757 <img class="p-img" src="{{imageLarge}}" alt="{{name}}"> 7758 </div> 7759 <div class="col-12 col-md-6 pr-1 mt-1"> 7760 <p class="font-weight-bold">{{name}}</p> 7761 {{#if download}} 7762 <a target="_blank" href="{{url}}"><i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u></a> 7763 {{/if}} 7764 </div> 7765 </div> 7766 </div> 7767 {{/each}} 7768 </div> 7769 </div> 7770 </div> 7771 </div> 7772 </div> 7773 </div> 7774 {{/each}} 7775 </div> 7776 </div> 7777 </div> 7778 </div> 7779 </script> 7780 </div> 7781 } 7782 else 7783 { 7784 <div class="card text-white bg-danger mt-3 mx-auto" style="width: 850px;"> 7785 <div class="card-header py-2"> 7786 <h2 class="m-0 text-center text-white">ERROR!</h2> 7787 </div> 7788 <div class="card-body py-2"> 7789 <h1 class="card-text m-0 text-center text-white">This product range group is <br>missing a ProductCategory</h1> 7790 </div> 7791 <div class="card-footer py-2"> 7792 <h3 class="m-0 text-center text-white">Fix this to show products</h3> 7793 </div> 7794 </div> 7795 } 7796 <code class="d-none js-e-breadcrumb-item-go-back-link"> 7797 <li class="breadcrumb-go-back-link breadcrumb-item m-0 p-0"> 7798 <a href="javascript:history.back();"> 7799 <span>@Translate("Go back","Go back")</span> 7800 </a> 7801 </li> 7802 </code> 7803 } 7804 } 7805 else 7806 { 7807 <div class="row mt-2"> 7808 @signIn() 7809 </div> 7810 } 7811 } 7812 } 7813