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_459281f457b94777a8d481b4df10fa98.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 4359
   at CompiledRazorTemplates.Dynamic.RazorEngine_459281f457b94777a8d481b4df10fa98.Execute() in D:\Dynamicweb.NET\Solutions\eu.dvp.dechra.espresso4.dk\Files\Templates\Designs\dechra-dvp\eCom\Productlist\dvp-product-list.cshtml:line 4452
   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 </script> 1315 </div> 1316 </div> 1317 } 1318 else 1319 { 1320 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 1321 { 1322 1323 groupId = product.GetString("Ecom:Group.ID"); 1324 1325 productName = product.GetString("Ecom:Product.Name"); 1326 productNameJSON = productName.Replace("\"","&quot;"); 1327 1328 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 1329 1330 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 1331 1332 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 1333 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 1334 1335 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 1336 1337 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 1338 1339 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 1340 1341 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 1342 1343 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 1344 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value"); 1345 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ");; 1346 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value"); 1347 1348 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value"); 1349 1350 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 1351 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value"); 1352 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value"); 1353 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value"); 1354 1355 hasDocuments = true; 1356 1357 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 1358 { 1359 hasDocuments = false; 1360 } 1361 1362 productRewardButtonLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonLink.Value"); 1363 productRewardButtonLinkProcessed = productRewardButtonLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardButtonLink) : productRewardButtonLink; 1364 productRewardButtonText = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonText.Value"); 1365 showRewardButton = !string.IsNullOrEmpty( productRewardButtonLinkProcessed ) && !string.IsNullOrEmpty(productRewardButtonText); 1366 1367 productRewardAdditionalLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardAdditionalLink.Value" ); 1368 productRewardAdditionalLinkProcessed = productRewardAdditionalLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardAdditionalLink) : productRewardAdditionalLink; 1369 showRewardAdditionalLink = !string.IsNullOrEmpty( productRewardAdditionalLinkProcessed ); 1370 1371 productShowFooterContent = product.GetBoolean("Ecom:Product.CategoryField.DechraPIMProducts.ShowProductFooter.Value"); 1372 productFooterContent = productShowFooterContent ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductFooterContent.Value") : ""; 1373 1374 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value"); 1375 1376 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value").Replace("<table>","<table class='table table-striped table-condensed'>"); 1377 1378 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 1379 1380 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 1381 1382 } 1383 <div class="row e-product dvp-product-details"> 1384 <div class="col-12"> 1385 <div class="row"> 1386 <div class="col-12"> 1387 <h1 class="mb-1 font-weight-bold"> 1388 @rangeNameSuperscripted 1389 </h1> 1390 </div> 1391 </div> 1392 </div> 1393 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4"> 1394 <div class="row"> 1395 <div class="col-12"> 1396 <div class="e-product-image-container single-range"> 1397 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 1398 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")"> 1399 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 1400 <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"> 1401 </div> 1402 1403 @for(int i = 0; i < images.Count(); i++) 1404 { 1405 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 1406 <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)"> 1407 </div> 1408 } 1409 </div> 1410 @if(images.Any()) 1411 { 1412 <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> 1413 <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> 1414 <ol class="carousel-indicators"> 1415 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 1416 <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> 1417 </li> 1418 @for(int i = 0; i < images.Count(); i++) 1419 { 1420 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)"> 1421 <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> 1422 </li> 1423 } 1424 </ol> 1425 } 1426 </div> 1427 </div> 1428 </div> 1429 </div> 1430 </div> 1431 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3"> 1432 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span> 1433 @if(!string.IsNullOrEmpty(optionalName)) 1434 { 1435 <div class="row"> 1436 <div class="col-12"> 1437 <h2 class="mb-0">@displayNameSuperscripted</h2> 1438 </div> 1439 </div> 1440 } 1441 @if(!string.IsNullOrEmpty(productShortDescription)) 1442 { 1443 <div class="row"> 1444 <div class="col-12"> 1445 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")) 1446 </div> 1447 </div> 1448 } 1449 <div class="row"> 1450 <div class="col-12 mt-2 table-responsive"> 1451 <table class="table"> 1452 @if(!string.IsNullOrEmpty(productActives)) 1453 { 1454 <tr> 1455 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 1456 <td>@productActives</td> 1457 </tr> 1458 } 1459 @if(!string.IsNullOrEmpty(productPackSize)) 1460 { 1461 <tr> 1462 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 1463 <td>@productPackSize</td> 1464 </tr> 1465 } 1466 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 1467 { 1468 <tr> 1469 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 1470 <td>@productWithdrawalPeriod</td> 1471 </tr> 1472 } 1473 @if(!string.IsNullOrEmpty(productStorageCondition)) 1474 { 1475 <tr> 1476 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 1477 <td>@productStorageCondition</td> 1478 </tr> 1479 } 1480 @if(hasDocuments) 1481 { 1482 <tr> 1483 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 1484 <td> 1485 @if(!string.IsNullOrEmpty(productDatasheet)) 1486 { 1487 if ( showProductFileTypeDatasheet ) 1488 { 1489 <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"> 1490 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i> 1491 </a> 1492 } 1493 else 1494 { 1495 <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")"> 1496 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 1497 </a> 1498 } 1499 } 1500 @if(!string.IsNullOrEmpty(productPackInsert)) 1501 { 1502 if ( showProductFileTypePackInsert ) 1503 { 1504 <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"> 1505 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i> 1506 </a> 1507 } 1508 else 1509 { 1510 <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")"> 1511 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 1512 </a> 1513 } 1514 } 1515 @if(!string.IsNullOrEmpty(productSPC)) 1516 { 1517 if ( showProductFileTypeSPC ) 1518 { 1519 <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"> 1520 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i> 1521 </a> 1522 } 1523 else 1524 { 1525 <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")"> 1526 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 1527 </a> 1528 } 1529 } 1530 @if(!string.IsNullOrEmpty(productMSDS)) 1531 { 1532 if ( showProductFileTypeMSDS ) 1533 { 1534 <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"> 1535 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i> 1536 </a> 1537 } 1538 else 1539 { 1540 <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")"> 1541 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 1542 </a> 1543 } 1544 } 1545 </td> 1546 </tr> 1547 } 1548 </table> 1549 </div> 1550 </div> 1551 @if(!string.IsNullOrEmpty(productShopInformation)) 1552 { 1553 <div class="row mt-1"> 1554 <div class="col-12"> 1555 <div class="table-responsive"> 1556 @productShopInformation 1557 </div> 1558 </div> 1559 </div> 1560 } 1561 @if(!string.IsNullOrEmpty(productDisclaimer)) 1562 { 1563 <div class="row mt-1"> 1564 <div class="col-12"> 1565 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 1566 <small> 1567 @productDisclaimer 1568 </small> 1569 </div> 1570 </div> 1571 } 1572 @if ( showRewardButton ) 1573 { 1574 <div class="row"> 1575 <div class="col-12"> 1576 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3> 1577 </div> 1578 <div class="col-12"> 1579 <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"> 1580 @productRewardButtonText 1581 </a> 1582 @if ( !hideRequestmoreinformation ) 1583 { 1584 <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"> 1585 @Translate("Talk with a Dechra member","Talk with a Dechra member") 1586 </button> 1587 } 1588 @if ( showRewardAdditionalLink ) 1589 { 1590 <p class="mb-1 mt-1 small"> 1591 <a href="@productRewardAdditionalLinkProcessed" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName"> 1592 @Translate("Not a Dechra Rewards Member? Click here", "Not a Dechra Rewards Member? Click here") 1593 </a> 1594 </p> 1595 } 1596 </div> 1597 </div> 1598 } 1599 else 1600 { 1601 if ( !hideRequestmoreinformation ) 1602 { 1603 <div class="row"> 1604 <div class="col-12"> 1605 <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"> 1606 @Translate( "Request more information", "Request more information" ) 1607 </button> 1608 </div> 1609 </div> 1610 } 1611 } 1612 </div> 1613 </div> 1614 } 1615 1616 int productPanelsItemId = 0; 1617 1618 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId)) 1619 { 1620 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId); 1621 1622 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId"> 1623 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations) 1624 { 1625 string productPanelNameValue = productPanel.GetValue<string>("Name"); 1626 1627 if(productPanelNameValue == "Premium Content") 1628 { 1629 <div class="col-12" id="js-dvp-product-premium-content"> 1630 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1631 <div class="row"> 1632 <div class="col-12 is-loading"> 1633 <div class="e-loading-spinner"></div> 1634 </div> 1635 </div> 1636 </div> 1637 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template"> 1638 <div class="js-dvp-product-premium-content-animate fade"> 1639 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1640 <div class="row"> 1641 <div class="col-12 col-md-4"> 1642 <div class="e-product-section-header"> 1643 <h2 class="mb-1 mb-md-0"> 1644 @Translate("Premium Content","Premium Content") 1645 </h2> 1646 </div> 1647 </div> 1648 <div class="col-12 col-md-8 mt-half"> 1649 {{#each premiumPages}} 1650 <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}}"> 1651 <div class="col-12 col-md-6"> 1652 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 1653 </div> 1654 <div class="col-12 col-md-6"> 1655 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 1656 <p>{{searchFriendlyDescription}}</p> 1657 <p> 1658 <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}}"> 1659 {{searchFriendlyButtonText}} 1660 </a> 1661 </p> 1662 </div> 1663 </div> 1664 {{/each}} 1665 </div> 1666 </div> 1667 </div> 1668 </div> 1669 </script> 1670 </div> 1671 } 1672 else if(productPanelNameValue == "Supportmaterials for vets") 1673 { 1674 <div class="col-12" id="js-dvp-product-supportmaterials-vets"> 1675 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1676 <div class="row"> 1677 <div class="col-12 is-loading"> 1678 <div class="e-loading-spinner"></div> 1679 </div> 1680 </div> 1681 </div> 1682 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template"> 1683 <div class="js-dvp-product-supportmaterials-vets-animate fade"> 1684 {{#if vetSupportmaterials.items}} 1685 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1686 <div class="row"> 1687 {{#if vetSupportmaterials.display}} 1688 <div class="col-12 col-md-4"> 1689 <div class="e-product-section-header"> 1690 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2> 1691 </div> 1692 </div> 1693 <div class="col-12 col-md-8 mt-half"> 1694 {{#each vetSupportmaterials.items}} 1695 1696 <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}}"> 1697 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 1698 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 1699 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 1700 </p> 1701 1702 <div class="row"> 1703 <div class="col-12"> 1704 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}"> 1705 <div class="row"> 1706 <div class="col-12 pl-md-3"> 1707 <div class="row"> 1708 {{#each materials}} 1709 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 1710 <div class="row"> 1711 <div class="col-12 col-md-6 text-center"> 1712 {{#if download}} 1713 {{#if loginToDownload}} 1714 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 1715 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1716 </a> 1717 {{else}} 1718 <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"> 1719 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1720 </a> 1721 {{/if}} 1722 {{else}} 1723 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1724 {{/if}} 1725 </div> 1726 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 1727 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 1728 1729 {{#if loginToDownload}} 1730 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 1731 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download") 1732 </a> 1733 {{else}} 1734 <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"> 1735 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 1736 </a> 1737 {{/if}} 1738 1739 @if(shopIsActive && hasAccess) 1740 { 1741 @:{{#if orderable}} 1742 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 1743 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 1744 <input type="hidden" name="CartCmd" value="Add"> 1745 <input type="hidden" name="ProductID" value="{{id}}"> 1746 <input type="hidden" name="VariantID" value=""> 1747 <input type="hidden" name="UnitID" value=""> 1748 <input type="hidden" name="Redirect" value="false"> 1749 <input type="hidden" name="Quantity" value="1"> 1750 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 1751 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 1752 </form> 1753 @:{{/if}} 1754 } 1755 </div> 1756 </div> 1757 </div> 1758 {{/each}} 1759 </div> 1760 </div> 1761 </div> 1762 </div> 1763 </div> 1764 </div> 1765 {{/each}} 1766 </div> 1767 {{else}} 1768 <div class="col-12 text-center"> 1769 <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> 1770 <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> 1771 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 1772 <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> 1773 </div> 1774 {{/if}} 1775 </div> 1776 </div> 1777 {{/if}} 1778 </div> 1779 </script> 1780 1781 </div> 1782 } 1783 else if(productPanelNameValue == "Supportmaterials for pet owners") 1784 { 1785 <div class="col-12" id="js-dvp-product-supportmaterials-clients"> 1786 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1787 <div class="row"> 1788 <div class="col-12 is-loading"> 1789 <div class="e-loading-spinner"></div> 1790 </div> 1791 </div> 1792 </div> 1793 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template"> 1794 <div class="js-dvp-product-supportmaterials-clients-animate fade"> 1795 {{#if clientSupportmaterials.items}} 1796 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1797 <div class="row"> 1798 {{#if clientSupportmaterials.display}} 1799 <div class="col-12 col-md-4"> 1800 <div class="e-product-section-header"> 1801 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2> 1802 </div> 1803 </div> 1804 <div class="col-12 col-md-8 mt-half"> 1805 {{#each clientSupportmaterials.items}} 1806 1807 <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}}"> 1808 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 1809 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 1810 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 1811 </p> 1812 1813 <div class="row"> 1814 <div class="col-12"> 1815 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}"> 1816 <div class="row"> 1817 <div class="col-12 pl-md-3"> 1818 <div class="row"> 1819 {{#each materials}} 1820 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 1821 <div class="row"> 1822 <div class="col-12 col-md-6 text-center"> 1823 {{#if download}} 1824 {{#if loginToDownload}} 1825 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 1826 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1827 </a> 1828 {{else}} 1829 <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"> 1830 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1831 </a> 1832 {{/if}} 1833 {{else}} 1834 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1835 {{/if}} 1836 </div> 1837 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 1838 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 1839 {{#if download}} 1840 <p class="mb-1"> 1841 {{#if loginToDownload}} 1842 <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> 1843 {{else}} 1844 <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"> 1845 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 1846 </a> 1847 {{/if}} 1848 </p> 1849 {{/if}} 1850 1851 @if(shopIsActive && hasAccess) 1852 { 1853 @:{{#if orderable}} 1854 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 1855 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 1856 <input type="hidden" name="CartCmd" value="Add"> 1857 <input type="hidden" name="ProductID" value="{{id}}"> 1858 <input type="hidden" name="VariantID" value=""> 1859 <input type="hidden" name="UnitID" value=""> 1860 <input type="hidden" name="Redirect" value="false"> 1861 <input type="hidden" name="Quantity" value="1"> 1862 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 1863 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 1864 </form> 1865 @:{{/if}} 1866 } 1867 1868 </div> 1869 </div> 1870 </div> 1871 {{/each}} 1872 </div> 1873 </div> 1874 </div> 1875 </div> 1876 </div> 1877 </div> 1878 {{/each}} 1879 </div> 1880 {{else}} 1881 <div class="col-12 text-center"> 1882 <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> 1883 <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> 1884 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 1885 <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> 1886 </div> 1887 {{/if}} 1888 </div> 1889 </div> 1890 {{/if}} 1891 </div> 1892 </script> 1893 1894 </div> 1895 } 1896 else if(productPanelNameValue == "Videos") 1897 { 1898 <div class="col-12" id="js-dvp-product-videos"> 1899 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1900 <div class="row"> 1901 <div class="col-12 is-loading"> 1902 <div class="e-loading-spinner"></div> 1903 </div> 1904 </div> 1905 </div> 1906 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template"> 1907 <div class="js-dvp-product-videos-animate fade"> 1908 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1909 <div class="row"> 1910 {{#if display}} 1911 <div class="col-12 col-md-4"> 1912 <div class="e-product-section-header"> 1913 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2> 1914 </div> 1915 </div> 1916 <div class="col-12 col-md-8 mt-half"> 1917 {{#compare totalVideoCount '>' 4}} 1918 <div class="collapse-peek"> 1919 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos"> 1920 {{/compare}} 1921 <div class="row"> 1922 {{#each videos}} 1923 {{#each videos}} 1924 <div class="col-12 col-md-6"> 1925 <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}}}"> 1926 <div> 1927 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" /> 1928 <p class="text-center mt-1 mb-3">{{embedTitle}}</p> 1929 </div> 1930 </a> 1931 <sc{{handlebarHack}}ript type="application/json"> 1932 { 1933 "url":"{{../url}}", 1934 "header":"{{embedTitle}}", 1935 "embedUrl":"{{{embedUrl}}}" 1936 } 1937 </sc{{handlebarHack}}ript> 1938 </div> 1939 {{/each}} 1940 {{/each}} 1941 </div> 1942 {{#compare totalVideoCount '>' 4}} 1943 </div> 1944 <div class="collapse-peek-toggle"> 1945 <div class="row"> 1946 <div class="col-12 mx-auto text-center"> 1947 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos"> 1948 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span> 1949 </a> 1950 </div> 1951 </div> 1952 </div> 1953 {{/compare}} 1954 </div> 1955 </div> 1956 {{else}} 1957 <div class="col-12 text-center"> 1958 <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> 1959 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p> 1960 <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> 1961 </div> 1962 {{/if}} 1963 </div> 1964 </div> 1965 </div> 1966 </script> 1967 </div> 1968 } 1969 else if(productPanelNameValue == "Related ranges") 1970 { 1971 <div class="col-12"> 1972 @if( GetLoop("RelatedRanges").Count() > 0 ) 1973 { 1974 string relatedProductsHeader = Translate("Other related products","Other related products"); 1975 1976 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value"))) 1977 { 1978 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value"); 1979 } 1980 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1981 <div class="row"> 1982 <div class="col-12 col-md-4"> 1983 <div class="e-product-section-header"> 1984 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2> 1985 </div> 1986 </div> 1987 <div class="col-12 col-md-8 mt-half dvp-ranges-list"> 1988 <div class="row"> 1989 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges")) 1990 { 1991 string relatedRangeGroupId = ""; 1992 1993 int relatedProductInt = 0; 1994 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count(); 1995 string relatedRangeName = relatedRange.GetString("Range"); 1996 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>"); 1997 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-"); 1998 1999 <div class="col-12 col-lg-6 mb-3"> 2000 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")"> 2001 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3> 2002 </div> 2003 <div class="col-12 px-1 pt-1 border dvp-range"> 2004 <div> 2005 <div class="row"> 2006 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange")) 2007 { 2008 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId; 2009 2010 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage"); 2011 2012 if(relatedProductInt == 2) 2013 { 2014 @:</div> 2015 @:</div> 2016 @:<div class="collapse" id="range-@relatedRangeNameCleaned"> 2017 @:<div class="row"> 2018 } 2019 2020 string relatedUrl = string.Empty; 2021 2022 string relatedUrlFriendlyProduct = string.Empty; 2023 2024 string relatedProductName = product.GetString("Ecom:Product.Name"); 2025 2026 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName"); 2027 2028 string relatedProductDisplayName = relatedProductName; 2029 string relatedProductTitleName = relatedProductName; 2030 2031 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 2032 { 2033 if(hideRelatedProductName) 2034 { 2035 relatedProductDisplayName = relatedRangeNameSuperscripted; 2036 relatedProductTitleName = relatedRangeName; 2037 } 2038 else 2039 { 2040 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName; 2041 relatedProductTitleName = relatedRangeName + " " + relatedProductName; 2042 } 2043 } 2044 2045 if(product.GetBoolean("Ecom:Product:Field.IsDiets")) 2046 { 2047 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 2048 } 2049 else 2050 { 2051 relatedUrl = relatedProductName; 2052 } 2053 2054 if(relatedProductsInRangeCount > 1) 2055 { 2056 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-"); 2057 } 2058 2059 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 2060 2061 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct; 2062 2063 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center"> 2064 <a href="@relatedProductUrl" title="@relatedProductTitleName"> 2065 <div class="row"> 2066 <div class="col-12 dvp-image-container"> 2067 <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"> 2068 </div> 2069 <div class="col-12"> 2070 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p> 2071 </div> 2072 </div> 2073 </a> 2074 </div> 2075 2076 relatedProductInt++; 2077 } 2078 </div> 2079 </div> 2080 <div class="row mt-1 dvp-view-more-products"> 2081 @if(relatedProductsInRangeCount > 2) 2082 { 2083 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2; 2084 2085 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products"); 2086 2087 if(relatedProductsInRangeCount == 3 ) 2088 { 2089 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product"); 2090 } 2091 2092 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString()); 2093 2094 <div class="col-12"> 2095 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more"> 2096 <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);"> 2097 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span> 2098 <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> 2099 </a> 2100 </p> 2101 </div> 2102 } 2103 </div> 2104 </div> 2105 </div> 2106 } 2107 </div> 2108 </div> 2109 </div> 2110 </div> 2111 } 2112 </div> 2113 } 2114 else if(productPanelNameValue == "Newsletter") 2115 { 2116 <div class="col-12"> 2117 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2118 <div class="row"> 2119 <div class="col-12 col-md-4"> 2120 <div class="e-product-section-header"> 2121 <h2 class="mb-1 mb-md-0">Newsletter</h2> 2122 </div> 2123 </div> 2124 <div class="col-12 col-md-8"> 2125 <div class="dvp-newsletter-signup-form"> 2126 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide"> 2127 <div class="form-group"> 2128 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label> 2129 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter"> 2130 </div> 2131 <div class="form-group"> 2132 <button type="submit" class="btn btn-primary">Sign up</button> 2133 </div> 2134 </form> 2135 </div> 2136 </div> 2137 </div> 2138 </div> 2139 </div> 2140 } 2141 else if(productPanelNameValue == "eLearning") 2142 { 2143 <div class="col-12" id="js-dvp-product-elearning"> 2144 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2145 <div class="row"> 2146 <div class="col-12 is-loading"> 2147 <div class="e-loading-spinner"></div> 2148 </div> 2149 </div> 2150 </div> 2151 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template"> 2152 <div class="js-dvp-product-elearning-animate fade"> 2153 {{#if elearning.items}} 2154 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2155 <div class="row"> 2156 <div class="col-12 col-md-4"> 2157 <div class="e-product-section-header"> 2158 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2> 2159 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" /> 2160 </div> 2161 </div> 2162 <div class="col-12 col-md-8"> 2163 <h3> 2164 {{elearning.items.0.courseAmountText}} 2165 </h3> 2166 <div class="row"> 2167 <div class="col-12"> 2168 <div class="list-group"> 2169 {{#if elearning.display}} 2170 {{#each elearning.items.0.courses}} 2171 <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}}"> 2172 <b>{{name}}</b> 2173 </a> 2174 {{/each}} 2175 {{else}} 2176 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p> 2177 <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> 2178 {{/if}} 2179 </div> 2180 </div> 2181 </div> 2182 {{#unless elearning.display}} 2183 <div class="row mt-2"> 2184 <div class="col-12"> 2185 <div class="bg-academy"> 2186 <div class="row p-2"> 2187 @{ 2188 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString(); 2189 } 2190 <div class="col-12"> 2191 <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> 2192 </div> 2193 <div class="col-12 col-md-8 text-white"> 2194 <ul class="mb-0"> 2195 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li> 2196 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li> 2197 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li> 2198 </ul> 2199 </div> 2200 <div class="col-12 col-md-4 pt-2"> 2201 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p> 2202 </div> 2203 </div> 2204 </div> 2205 </div> 2206 </div> 2207 {{/unless}} 2208 </div> 2209 </div> 2210 </div> 2211 {{/if}} 2212 </div> 2213 </script> 2214 </div> 2215 } 2216 else if(productPanelNameValue == "Product Websites") 2217 { 2218 <div class="col-12" id="js-dvp-product-websites"> 2219 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2220 <div class="row"> 2221 <div class="col-12 is-loading"> 2222 <div class="e-loading-spinner"></div> 2223 </div> 2224 </div> 2225 </div> 2226 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template"> 2227 <div class="js-dvp-product-websites-animate fade"> 2228 {{#if websites.items}} 2229 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2230 <div class="row"> 2231 {{#if websites.display}} 2232 <div class="col-12 col-md-4"> 2233 <div class="e-product-section-header"> 2234 <h2 class="mb-1 mb-md-0"> 2235 {{#compare count '>' 1}} 2236 @Translate("Product Websites","Product Websites") 2237 {{else}} 2238 @Translate("Product Website","Product Website") 2239 {{/compare}} 2240 </h2> 2241 </div> 2242 </div> 2243 <div class="col-12 col-md-8 mt-half"> 2244 {{#each websites.items.0.website}} 2245 <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}}"> 2246 <div class="col-12 col-md-6"> 2247 <p class="lead"> 2248 {{name}} 2249 </p> 2250 <p> 2251 <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}}"> 2252 @Translate("Go to website","Go to website") 2253 </a> 2254 </p> 2255 </div> 2256 <div class="col-12 col-md-6"> 2257 <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}}"> 2258 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" /> 2259 </a> 2260 </div> 2261 </div> 2262 {{/each}} 2263 </div> 2264 {{else}} 2265 <div class="col-12 text-center"> 2266 <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> 2267 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p> 2268 <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> 2269 </div> 2270 {{/if}} 2271 </div> 2272 </div> 2273 {{/if}} 2274 </div> 2275 </script> 2276 </div> 2277 } 2278 else if(productPanelNameValue == "Previous Premium Content") 2279 { 2280 <div class="col-12" id="js-dvp-product-previous-premium-content"> 2281 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2282 <div class="row"> 2283 <div class="col-12 is-loading"> 2284 <div class="e-loading-spinner"></div> 2285 </div> 2286 </div> 2287 </div> 2288 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template"> 2289 <div class="js-dvp-product-previous-premium-content-animate fade"> 2290 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2291 <div class="row"> 2292 <div class="col-12 col-md-4"> 2293 <div class="e-product-section-header"> 2294 <h2 class="mb-1 mb-md-0"> 2295 @Translate("Previous Premium Content","Premium Content") 2296 </h2> 2297 </div> 2298 </div> 2299 <div class="col-12 col-md-8 mt-half"> 2300 {{#each premiumPages}} 2301 <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}}"> 2302 <div class="col-12 col-md-6"> 2303 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 2304 </div> 2305 <div class="col-12 col-md-6"> 2306 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 2307 <p>{{searchFriendlyDescription}}</p> 2308 <p> 2309 <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}}"> 2310 {{searchFriendlyButtonText}} 2311 </a> 2312 </p> 2313 </div> 2314 </div> 2315 {{/each}} 2316 </div> 2317 </div> 2318 </div> 2319 </div> 2320 </script> 2321 </div> 2322 } 2323 else if(productPanelNameValue == "Frequent Treatment Questions") 2324 { 2325 <div class="col-12" id="js-dvp-product-faq"> 2326 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2327 <div class="row"> 2328 <div class="col-12 is-loading"> 2329 <div class="e-loading-spinner"></div> 2330 </div> 2331 </div> 2332 </div> 2333 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template"> 2334 <div class="js-dvp-product-faq-animate fade"> 2335 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2336 <div class="row"> 2337 {{#if display}} 2338 <div class="col-12 col-md-4"> 2339 <div class="e-product-section-header"> 2340 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2> 2341 </div> 2342 </div> 2343 <div class="col-12 col-md-8 mt-half dvp-faq"> 2344 {{# faqs}} 2345 {{#each faq}} 2346 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}"> 2347 <div class="row"> 2348 <div class="col-12"> 2349 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}"> 2350 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 2351 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 2352 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small> 2353 </h3> 2354 </div> 2355 </div> 2356 <div class="row"> 2357 <div class="col-12"> 2358 <div class="collapse" id="collapse-{{paragraphId}}"> 2359 <div class="row"> 2360 <div class="col-12 pl-3"> 2361 {{#each faqList}} 2362 <div class="row"> 2363 <div class="col-12 mt-1"> 2364 <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}}"> 2365 {{listHeader}} 2366 </a> 2367 <sc{{handlebarHack}}ript type="application/json"> 2368 { 2369 "url":"{{../../url}}", 2370 "categoryName": "{{../categoryName}}", 2371 "header":"{{listHeader}}", 2372 "content":"{{{listContent}}}" 2373 } 2374 </sc{{handlebarHack}}ript> 2375 </div> 2376 </div> 2377 {{/each}} 2378 </div> 2379 </div> 2380 </div> 2381 </div> 2382 </div> 2383 </div> 2384 {{/each}} 2385 {{/faqs}} 2386 2387 {{#each accordions}} 2388 <div class="p col-12 p-accordion" id="{{paragraphID}}"> 2389 {{#if introText}} 2390 <div class="p-accordion-lead"> 2391 {{{introText}}} 2392 </div> 2393 {{/if}} 2394 <div class="p-accordion-container "> 2395 {{#each accordionItems}} 2396 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 "> 2397 <div class="p-accordion-toggle"> 2398 <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"> 2399 <span class="p-accordion-toggle-text mb-0 line-height-sm none"> 2400 {{heading}} 2401 </span> 2402 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i> 2403 </p> 2404 </div> 2405 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse"> 2406 <div class="px-2 pb-1 p-accordion-content"> 2407 <div class="p-txt-container dvp-rich-text-content pt-1"> 2408 {{{text}}} 2409 </div> 2410 </div> 2411 </div> 2412 </div> 2413 {{/each}} 2414 </div> 2415 </div> 2416 {{/each}} 2417 2418 2419 </div> 2420 {{else}} 2421 <div class="col-12 text-center"> 2422 <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> 2423 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p> 2424 <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> 2425 </div> 2426 {{/if}} 2427 </div> 2428 </div> 2429 </div> 2430 </script> 2431 </div> 2432 } 2433 else if(productPanelNameValue == "Got More Questions form") 2434 { 2435 <div class="col-12 js-dvp-product-details-more-info-section"> 2436 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2437 <div class="row"> 2438 <div class="col-12 col-md-4"> 2439 <div class="e-product-section-header"> 2440 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2> 2441 </div> 2442 </div> 2443 <div class="p col-12 col-md-8 mt-half"> 2444 @{ 2445 int currentPageId; 2446 2447 int.TryParse(pageId, out currentPageId); 2448 2449 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph; 2450 2451 int currentParagraphId = currentParagraph.GlobalRecordParagraphID; 2452 2453 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString(); 2454 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString(); 2455 2456 int formPageId; 2457 int formParagraphId; 2458 2459 int.TryParse(formPageIdString, out formPageId); 2460 int.TryParse(formParagraphIdString, out formParagraphId); 2461 2462 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId); 2463 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId); 2464 2465 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView); 2466 2467 } 2468 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString) 2469 </div> 2470 </div> 2471 </div> 2472 </div> 2473 } 2474 } 2475 </div> 2476 } 2477 2478 @:</div></div></div></div></div></section></article> 2479 2480 <footer class="bg-light"> 2481 <article> 2482 <section class="e-section"> 2483 <div class="container-fluid"> 2484 <div class="row" id="js-dvp-product-footer"> 2485 @if ( !string.IsNullOrEmpty(productFooterContent) ) 2486 { 2487 <div class="col-12 mt-2 small"> 2488 @productFooterContent 2489 </div> 2490 } 2491 <script id="js-e-handlebars-tmpl-dvp-product-footer" type="text/x-handlebars-template"> 2492 {{#if FooterContent}} 2493 <div class="col-12 mt-2 small"> 2494 {{{FooterContent}}} 2495 </div> 2496 {{/if}} 2497 </script> 2498 </div> 2499 </div> 2500 </section> 2501 </article> 2502 </footer> 2503 2504 } 2505 else if(productType.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductType.Value") == "supplies") 2506 { 2507 string rangeName = range.GetString("Range"); 2508 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>"); 2509 string rangeId = string.Empty; 2510 string therapyAreaId = string.Empty; 2511 string therapyAreaName = string.Empty; 2512 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 2513 string optionalName = string.Empty; 2514 string displayName = string.Empty; 2515 string displayNameSuperscripted = string.Empty; 2516 string groupId = string.Empty; 2517 string productName = string.Empty; 2518 string productNameJSON = string.Empty; 2519 string productDisplayName = string.Empty; 2520 string productDisplayNameSuperscripted = string.Empty; 2521 string urlFriendlyProductName = string.Empty; 2522 string productShortDescription = string.Empty; 2523 string productShortDescriptionJSON = string.Empty; 2524 string productActives = string.Empty; 2525 string productActivesJSON = string.Empty; 2526 string productStorageCondition = string.Empty; 2527 string productStorageConditionJSON = string.Empty; 2528 string productPackSize = string.Empty; 2529 string productWithdrawalPeriod = string.Empty; 2530 string lyticsTopics = string.Empty; 2531 string productDatasheet = string.Empty; 2532 string productPackInsert = string.Empty; 2533 string productSPC = string.Empty; 2534 string productMSDS = string.Empty; 2535 bool hasDocuments = true; 2536 string productDisclaimer = string.Empty; 2537 string productDisclaimerJSON = string.Empty; 2538 string productShopInformation = string.Empty; 2539 string productShopInformationJSON = string.Empty; 2540 string productImage = string.Empty; 2541 string productRewardButtonLink = string.Empty; 2542 string productRewardButtonLinkProcessed = string.Empty; 2543 string productRewardButtonText = string.Empty; 2544 bool showRewardButton = false; 2545 string productRewardAdditionalLink = string.Empty; 2546 string productRewardAdditionalLinkProcessed = string.Empty; 2547 bool showRewardAdditionalLink = false; 2548 bool productShowFooterContent = false; 2549 string productFooterContent = string.Empty; 2550 string productFooterContentJSON = string.Empty; 2551 List<string> images = new List<string>(); 2552 string productUrl = string.Empty; 2553 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts"); 2554 bool applyRangeNameToProductNames = Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"); 2555 string signInPage = Espresso.Page.Area.Item.GetValue<string>("SignUpPage"); 2556 2557 <div class="row"> 2558 <div class="col-12 d-none d-md-block" id="js-dvp-product-premium-content-highlight"> 2559 <script id="js-e-handlebars-tmpl-dvp-product-premium-content-highlight" type="text/x-handlebars-template"> 2560 {{#if premiumPages.0.searchFriendlyImageBanner}} 2561 <div class="js-dvp-product-premium-content-animate fade mb-2"> 2562 <a href="javascript:void(0);" class="js-dvp-product-details-premium-content-highlight-banner-link"> 2563 <img class="p-img" src="{{premiumPages.0.searchFriendlyImageBanner}}" alt="{{premiumPages.0.searchFriendlyTitle}}" /> 2564 </a> 2565 </div> 2566 {{/if}} 2567 </script> 2568 </div> 2569 </div> 2570 2571 if(productsInRangeCount > 1) 2572 { 2573 <div class="row e-product"> 2574 <div class="col-12 col-md-6 mb-md-3 pr-sm-3"> 2575 <h1 class="mb-1 font-weight-bold"> 2576 @rangeNameSuperscripted 2577 </h1> 2578 @foreach(LoopItem product in range.GetLoop("ProductsInRange")) 2579 { 2580 2581 groupId = product.GetString("Ecom:Group.ID"); 2582 2583 productName = product.GetString("Ecom:Product.Name"); 2584 productNameJSON = productName.Replace("\"","&quot;"); 2585 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 2586 2587 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 2588 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 2589 2590 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 2591 productDisplayNameSuperscripted = applyRangeNameToProductNames ? $"{displayNameSuperscripted} {productNameJSON}" : productNameJSON; 2592 2593 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-"); 2594 2595 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 2596 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 2597 2598 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 2599 2600 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 2601 2602 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 2603 2604 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 2605 productActivesJSON = WebUtility.HtmlDecode(Regex.Replace(productActives, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 2606 2607 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value"); 2608 productStorageConditionJSON = WebUtility.HtmlDecode(Regex.Replace(productStorageCondition, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 2609 2610 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator")); 2611 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value"); 2612 2613 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value"); 2614 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 2615 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value"); 2616 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value"); 2617 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value"); 2618 2619 hasDocuments = true; 2620 2621 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 2622 { 2623 hasDocuments = false; 2624 } 2625 2626 2627 productRewardButtonLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonLink.Value" ); 2628 productRewardButtonLinkProcessed = productRewardButtonLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardButtonLink) : productRewardButtonLink; 2629 productRewardButtonText = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonText.Value"); 2630 showRewardButton = !string.IsNullOrEmpty( productRewardButtonLinkProcessed ) && !string.IsNullOrEmpty( productRewardButtonText ); 2631 2632 productRewardAdditionalLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardAdditionalLink.Value" ); 2633 productRewardAdditionalLinkProcessed = productRewardAdditionalLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardAdditionalLink) : productRewardAdditionalLink; 2634 showRewardAdditionalLink = !string.IsNullOrEmpty( productRewardAdditionalLinkProcessed ); 2635 2636 productShowFooterContent = product.GetBoolean("Ecom:Product.CategoryField.DechraPIMProducts.ShowProductFooter.Value"); 2637 productFooterContent = productShowFooterContent ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductFooterContent.Value") : ""; 2638 2639 if ( !string.IsNullOrEmpty(productFooterContent) ) 2640 { 2641 string hrefPattern = @"href\s*=\s*(?:[""'](?<1>[^""']*)[""']|(?<1>[^>\s]+))"; 2642 2643 Match regexMatch = Regex.Match(productFooterContent, hrefPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled, TimeSpan.FromSeconds(1)); 2644 2645 while (regexMatch.Success) 2646 { 2647 string href = regexMatch.Groups[ 1 ].ToString(); 2648 if ( href.ToLower().Contains("default.aspx?id=") ) 2649 { 2650 productFooterContent = productFooterContent.Replace(href, SearchEngineFriendlyURLs.GetFriendlyUrl(href.Replace("/",""))); 2651 } 2652 regexMatch = regexMatch.NextMatch(); 2653 } 2654 2655 productFooterContentJSON = WebUtility.HtmlDecode(Regex.Replace(productFooterContent, @"\t|\n|\r", " ")); 2656 } 2657 else 2658 { 2659 productFooterContentJSON = ""; 2660 } 2661 2662 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value"); 2663 productDisclaimerJSON = WebUtility.HtmlDecode(Regex.Replace(productDisclaimer, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 2664 2665 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value"); 2666 productShopInformationJSON = WebUtility.HtmlDecode(Regex.Replace(productShopInformation, @"\t|\n|\r", " ")).Replace("\"","'").Replace("<table>","<table class='table table-striped table-condensed'>"); 2667 2668 productUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}#{urlFriendlyProductName}"; 2669 2670 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 2671 2672 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 2673 2674 dynamic JSON = new { 2675 Name = productDisplayName, 2676 ShortDescription = productShortDescriptionJSON, 2677 Image = productImage, 2678 Images = images, 2679 Actives = productActivesJSON, 2680 StorageCondition = productStorageConditionJSON, 2681 PackSize = productPackSize, 2682 WithdrawalPeriod = productWithdrawalPeriod, 2683 Datasheet = !string.IsNullOrEmpty(productDatasheet) ? showProductFileTypeDatasheet ? productDatasheet : "None" : "", 2684 PackInsert = !string.IsNullOrEmpty(productPackInsert) ? showProductFileTypePackInsert ? productPackInsert : "None" : "", 2685 SPC = !string.IsNullOrEmpty(productSPC) ? showProductFileTypeSPC ? productSPC : "None" : "", 2686 MSDS = !string.IsNullOrEmpty(productMSDS) ? showProductFileTypeMSDS ? productMSDS : "None" : "", 2687 ShowDatasheet = showProductFileTypeDatasheet, 2688 ShowPackInsert = showProductFileTypePackInsert, 2689 ShowSPC = showProductFileTypeSPC, 2690 ShowMSDS = showProductFileTypeMSDS, 2691 HasDocuments = hasDocuments, 2692 Disclaimer = productDisclaimerJSON, 2693 ShopInformation = productShopInformationJSON, 2694 ShowRewardButton = showRewardButton, 2695 RewardButtonLink = showRewardButton ? productRewardButtonLinkProcessed : "", 2696 RewardButtonText = showRewardButton ? productRewardButtonText : "", 2697 RewardAdditionalLink = showRewardAdditionalLink ? productRewardAdditionalLinkProcessed : "", 2698 FooterContent = productFooterContentJSON 2699 }; 2700 2701 <a class="js-dvp-product-list-details" href="@productUrl" title="@productDisplayName" data-productname="@urlFriendlyProductName"> 2702 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span> 2703 <div class="row px-sm-1 my-2 my-sm-0"> 2704 <div class="dvp-product-list-details col-12 p-sm-1 py-1"> 2705 <div class="row"> 2706 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container"> 2707 <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"> 2708 </div> 2709 <div class="col-9 col-sm-8 px-sm-2 my-auto"> 2710 <p class="mb-0"> 2711 @if (applyRangeNameToProductNames) 2712 { 2713 <b>@productDisplayNameSuperscripted</b> 2714 } 2715 else 2716 { 2717 <b class="h3">@displayNameSuperscripted</b> 2718 <br> 2719 @productDisplayNameSuperscripted 2720 } 2721 </p> 2722 </div> 2723 <div class="col-2 d-none d-sm-block my-auto text-center"> 2724 <i class="material-icons material-icons-4x">keyboard_arrow_right</i> 2725 </div> 2726 </div> 2727 <script type="application/json" class="@urlFriendlyProductName"> 2728 @JsonService.Instance.ToJson(JSON) 2729 </script> 2730 </div> 2731 </div> 2732 </a> 2733 } 2734 </div> 2735 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-0 pb-4 pl-sm-3 dvp-product-details"> 2736 <div class="js-dvp-product-details-animate fade"> 2737 <div class="row"> 2738 <div class="col-12"> 2739 <div class="e-product-image-container dvp-product-details-image-container text-center"> 2740 <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"> 2741 </div> 2742 </div> 2743 </div> 2744 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 2745 { 2746 <div class="row"> 2747 <div class="col-12"> 2748 @productShortDescriptionJSON 2749 </div> 2750 </div> 2751 } 2752 <div class="row"> 2753 <div class="col-12 mt-2 table-responsive"> 2754 <table class="table"> 2755 @if(!string.IsNullOrEmpty(productActives)) 2756 { 2757 <tr> 2758 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 2759 <td>@productActives</td> 2760 </tr> 2761 } 2762 @if(!string.IsNullOrEmpty(productPackSize)) 2763 { 2764 <tr> 2765 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 2766 <td>@productPackSize</td> 2767 </tr> 2768 } 2769 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 2770 { 2771 <tr> 2772 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 2773 <td>@productWithdrawalPeriod</td> 2774 </tr> 2775 } 2776 @if(!string.IsNullOrEmpty(productStorageCondition)) 2777 { 2778 <tr> 2779 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 2780 <td>@productStorageCondition</td> 2781 </tr> 2782 } 2783 @if(hasDocuments) 2784 { 2785 <tr> 2786 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 2787 <td> 2788 @if(!string.IsNullOrEmpty(productDatasheet)) 2789 { 2790 if ( showProductFileTypeDatasheet ) 2791 { 2792 <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"> 2793 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i> 2794 </a> 2795 } 2796 else 2797 { 2798 <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")"> 2799 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 2800 </a> 2801 } 2802 } 2803 @if(!string.IsNullOrEmpty(productPackInsert)) 2804 { 2805 if ( showProductFileTypePackInsert ) 2806 { 2807 <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"> 2808 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i> 2809 </a> 2810 } 2811 else 2812 { 2813 <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")"> 2814 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 2815 </a> 2816 } 2817 } 2818 @if(!string.IsNullOrEmpty(productSPC)) 2819 { 2820 if ( showProductFileTypeSPC ) 2821 { 2822 <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"> 2823 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i> 2824 </a> 2825 } 2826 else 2827 { 2828 <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")"> 2829 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 2830 </a> 2831 } 2832 } 2833 @if(!string.IsNullOrEmpty(productMSDS)) 2834 { 2835 if ( showProductFileTypeMSDS ) 2836 { 2837 <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"> 2838 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i> 2839 </a> 2840 } 2841 else 2842 { 2843 <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")"> 2844 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 2845 </a> 2846 } 2847 } 2848 </td> 2849 </tr> 2850 } 2851 </table> 2852 </div> 2853 </div> 2854 @if(!string.IsNullOrEmpty(productShopInformationJSON)) 2855 { 2856 <div class="row"> 2857 <div class="col-12"> 2858 <div class="table-responsive"> 2859 @productShopInformationJSON 2860 </div> 2861 </div> 2862 </div> 2863 } 2864 @if(!string.IsNullOrEmpty(productDisclaimer)) 2865 { 2866 <div class="row"> 2867 <div class="col-12"> 2868 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 2869 <small> 2870 @productDisclaimer 2871 </small> 2872 </div> 2873 </div> 2874 } 2875 @if ( showRewardButton ) 2876 { 2877 <div class="row"> 2878 <div class="col-12"> 2879 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3> 2880 </div> 2881 <div class="col-12"> 2882 <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"> 2883 @productRewardButtonText 2884 </a> 2885 @if ( !hideRequestmoreinformation ) 2886 { 2887 <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"> 2888 @Translate("Talk with a Dechra member","Talk with a Dechra member") 2889 </button> 2890 } 2891 @if ( showRewardAdditionalLink ) 2892 { 2893 <p class="mb-1 mt-1 small"> 2894 <a href="@productRewardAdditionalLinkProcessed" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName"> 2895 @Translate("Not a Dechra Rewards Member? Click here", "Not a Dechra Rewards Member? Click here") 2896 </a> 2897 </p> 2898 } 2899 </div> 2900 </div> 2901 } 2902 else 2903 { 2904 if ( !hideRequestmoreinformation ) 2905 { 2906 <div class="row"> 2907 <div class="col-12"> 2908 <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"> 2909 @Translate( "Request more information", "Request more information" ) 2910 </button> 2911 </div> 2912 </div> 2913 } 2914 } 2915 </div> 2916 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template"> 2917 <div class="js-dvp-product-details-animate fade"> 2918 <div class="e-product-image-container multi-range"> 2919 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 2920 <div class="carousel-inner{{#if Images}} carousel-multiple-images{{/if}}"> 2921 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 2922 <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"> 2923 </div> 2924 {{#each Images}} 2925 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 2926 <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}}"> 2927 </div> 2928 {{/each}} 2929 </div> 2930 {{#if Images}} 2931 <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> 2932 <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> 2933 <ol class="carousel-indicators"> 2934 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 2935 <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> 2936 </li> 2937 {{#each Images}} 2938 <li data-target="#js-e-product-image-carousel" data-slide-to="{{math @@index "+" 1}}"> 2939 <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> 2940 </li> 2941 {{/each}} 2942 </ol> 2943 {{/if}} 2944 </div> 2945 </div> 2946 {{#if ShortDescription}} 2947 <div class="dvp-short-description"> 2948 {{{ShortDescription}}} 2949 </div> 2950 {{/if}} 2951 <div class="row"> 2952 <div class="col-12 mt-2 table-responsive"> 2953 <table class="table"> 2954 {{#if Actives}} 2955 <tr> 2956 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 2957 <td>{{{Actives}}}</td> 2958 </tr> 2959 {{/if}} 2960 {{#if PackSize}} 2961 <tr> 2962 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 2963 <td>{{PackSize}}</td> 2964 </tr> 2965 {{/if}} 2966 {{#if WithdrawalPeriod}} 2967 <tr> 2968 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 2969 <td>{{{WithdrawalPeriod}}}</td> 2970 </tr> 2971 {{/if}} 2972 {{#if StorageCondition}} 2973 <tr> 2974 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 2975 <td>{{{StorageCondition}}}</td> 2976 </tr> 2977 {{/if}} 2978 {{#if HasDocuments}} 2979 <tr> 2980 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 2981 <td> 2982 {{#if Datasheet}} 2983 {{#if ShowDatasheet}} 2984 <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}}"> 2985 @Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i> 2986 </a> 2987 {{else}} 2988 <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")"> 2989 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 2990 </a> 2991 {{/if}} 2992 {{/if}} 2993 {{#if PackInsert}} 2994 {{#if ShowPackInsert}} 2995 <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}}"> 2996 @Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i> 2997 </a> 2998 {{else}} 2999 <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")"> 3000 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 3001 </a> 3002 {{/if}} 3003 {{/if}} 3004 {{#if SPC}} 3005 {{#if ShowSPC}} 3006 <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}}"> 3007 @Translate("SPC","SPC") <i class="material-icons">get_app</i> 3008 </a> 3009 {{else}} 3010 <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")"> 3011 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 3012 </a> 3013 {{/if}} 3014 {{/if}} 3015 {{#if MSDS}} 3016 {{#if ShowMSDS}} 3017 <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}}"> 3018 @Translate("MSDS","MSDS") <i class="material-icons">get_app</i> 3019 </a> 3020 {{else}} 3021 <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")"> 3022 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 3023 </a> 3024 {{/if}} 3025 {{/if}} 3026 </td> 3027 </tr> 3028 {{/if}} 3029 </table> 3030 </div> 3031 </div> 3032 {{#if ShopInformation}} 3033 <div class="row mt-1"> 3034 <div class="col-12"> 3035 <div class="table-responsive"> 3036 {{{ShopInformation}}} 3037 </div> 3038 </div> 3039 </div> 3040 {{/if}} 3041 {{#if Disclaimer}} 3042 <div class="row mt-1"> 3043 <div class="col-12"> 3044 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 3045 <small> 3046 {{{Disclaimer}}} 3047 </small> 3048 </div> 3049 </div> 3050 {{/if}} 3051 {{#if ShowRewardButton}} 3052 <div class="row"> 3053 <div class="col-12"> 3054 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3> 3055 </div> 3056 <div class="col-12"> 3057 <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"> 3058 {{RewardButtonText}} 3059 </a> 3060 @if ( !hideRequestmoreinformation ) 3061 { 3062 <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"> 3063 @Translate("Talk with a Dechra member","Talk with a Dechra member") 3064 </button> 3065 } 3066 {{#if RewardAdditionalLink}} 3067 <p class="mb-1 mt-1 small"> 3068 <a href="{{RewardAdditionalLink}}" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName"> 3069 @Translate("Not a Dechra Rewards Member? Click here","Not a Dechra Rewards Member? Click here") 3070 </a> 3071 </p> 3072 {{/if}} 3073 </div> 3074 </div> 3075 {{else}} 3076 @if ( !hideRequestmoreinformation ) 3077 { 3078 <div class="row"> 3079 <div class="col-12"> 3080 <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"> 3081 @Translate( "Request more information", "Request more information" ) 3082 </button> 3083 </div> 3084 </div> 3085 } 3086 {{/if}} 3087 </div> 3088 </script> 3089 </div> 3090 </div> 3091 } 3092 else 3093 { 3094 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 3095 { 3096 3097 groupId = product.GetString("Ecom:Group.ID"); 3098 3099 productName = product.GetString("Ecom:Product.Name"); 3100 productNameJSON = productName.Replace("\"","&quot;"); 3101 3102 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 3103 3104 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 3105 3106 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 3107 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 3108 3109 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 3110 3111 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 3112 3113 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 3114 3115 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 3116 3117 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 3118 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value"); 3119 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ");; 3120 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value"); 3121 3122 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value"); 3123 3124 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 3125 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value"); 3126 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value"); 3127 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value"); 3128 3129 hasDocuments = true; 3130 3131 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 3132 { 3133 hasDocuments = false; 3134 } 3135 3136 productRewardButtonLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonLink.Value"); 3137 productRewardButtonLinkProcessed = productRewardButtonLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardButtonLink) : productRewardButtonLink; 3138 productRewardButtonText = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonText.Value"); 3139 showRewardButton = !string.IsNullOrEmpty( productRewardButtonLinkProcessed ) && !string.IsNullOrEmpty(productRewardButtonText); 3140 3141 productRewardAdditionalLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardAdditionalLink.Value" ); 3142 productRewardAdditionalLinkProcessed = productRewardAdditionalLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardAdditionalLink) : productRewardAdditionalLink; 3143 showRewardAdditionalLink = !string.IsNullOrEmpty( productRewardAdditionalLinkProcessed ); 3144 3145 productShowFooterContent = product.GetBoolean("Ecom:Product.CategoryField.DechraPIMProducts.ShowProductFooter.Value"); 3146 productFooterContent = productShowFooterContent ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductFooterContent.Value") : ""; 3147 3148 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value"); 3149 3150 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value").Replace("<table>","<table class='table table-striped table-condensed'>"); 3151 3152 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 3153 3154 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 3155 3156 } 3157 <div class="row e-product dvp-product-details"> 3158 <div class="col-12"> 3159 <div class="row"> 3160 <div class="col-12"> 3161 <h1 class="mb-1 font-weight-bold"> 3162 @rangeNameSuperscripted 3163 </h1> 3164 </div> 3165 </div> 3166 </div> 3167 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4"> 3168 <div class="row"> 3169 <div class="col-12"> 3170 <div class="e-product-image-container single-range"> 3171 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 3172 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")"> 3173 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 3174 <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"> 3175 </div> 3176 3177 @for(int i = 0; i < images.Count(); i++) 3178 { 3179 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 3180 <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)"> 3181 </div> 3182 } 3183 </div> 3184 @if(images.Any()) 3185 { 3186 <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> 3187 <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> 3188 <ol class="carousel-indicators"> 3189 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 3190 <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> 3191 </li> 3192 @for(int i = 0; i < images.Count(); i++) 3193 { 3194 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)"> 3195 <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> 3196 </li> 3197 } 3198 </ol> 3199 } 3200 </div> 3201 </div> 3202 </div> 3203 </div> 3204 </div> 3205 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3"> 3206 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span> 3207 @if(!string.IsNullOrEmpty(optionalName)) 3208 { 3209 <div class="row"> 3210 <div class="col-12"> 3211 <h2 class="mb-0">@displayNameSuperscripted</h2> 3212 </div> 3213 </div> 3214 } 3215 @if(!string.IsNullOrEmpty(productShortDescription)) 3216 { 3217 <div class="row"> 3218 <div class="col-12"> 3219 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")) 3220 </div> 3221 </div> 3222 } 3223 <div class="row"> 3224 <div class="col-12 mt-2 table-responsive"> 3225 <table class="table"> 3226 @if(!string.IsNullOrEmpty(productActives)) 3227 { 3228 <tr> 3229 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 3230 <td>@productActives</td> 3231 </tr> 3232 } 3233 @if(!string.IsNullOrEmpty(productPackSize)) 3234 { 3235 <tr> 3236 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 3237 <td>@productPackSize</td> 3238 </tr> 3239 } 3240 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 3241 { 3242 <tr> 3243 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 3244 <td>@productWithdrawalPeriod</td> 3245 </tr> 3246 } 3247 @if(!string.IsNullOrEmpty(productStorageCondition)) 3248 { 3249 <tr> 3250 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 3251 <td>@productStorageCondition</td> 3252 </tr> 3253 } 3254 @if(hasDocuments) 3255 { 3256 <tr> 3257 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 3258 <td> 3259 @if(!string.IsNullOrEmpty(productDatasheet)) 3260 { 3261 if ( showProductFileTypeDatasheet ) 3262 { 3263 <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"> 3264 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i> 3265 </a> 3266 } 3267 else 3268 { 3269 <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")"> 3270 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 3271 </a> 3272 } 3273 } 3274 @if(!string.IsNullOrEmpty(productPackInsert)) 3275 { 3276 if ( showProductFileTypePackInsert ) 3277 { 3278 <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"> 3279 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i> 3280 </a> 3281 } 3282 else 3283 { 3284 <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")"> 3285 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 3286 </a> 3287 } 3288 } 3289 @if(!string.IsNullOrEmpty(productSPC)) 3290 { 3291 if ( showProductFileTypeSPC ) 3292 { 3293 <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"> 3294 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i> 3295 </a> 3296 } 3297 else 3298 { 3299 <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")"> 3300 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 3301 </a> 3302 } 3303 } 3304 @if(!string.IsNullOrEmpty(productMSDS)) 3305 { 3306 if ( showProductFileTypeMSDS ) 3307 { 3308 <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"> 3309 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i> 3310 </a> 3311 } 3312 else 3313 { 3314 <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")"> 3315 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 3316 </a> 3317 } 3318 } 3319 </td> 3320 </tr> 3321 } 3322 </table> 3323 </div> 3324 </div> 3325 @if(!string.IsNullOrEmpty(productShopInformation)) 3326 { 3327 <div class="row mt-1"> 3328 <div class="col-12"> 3329 <div class="table-responsive"> 3330 @productShopInformation 3331 </div> 3332 </div> 3333 </div> 3334 } 3335 @if(!string.IsNullOrEmpty(productDisclaimer)) 3336 { 3337 <div class="row mt-1"> 3338 <div class="col-12"> 3339 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 3340 <small> 3341 @productDisclaimer 3342 </small> 3343 </div> 3344 </div> 3345 } 3346 @if ( showRewardButton ) 3347 { 3348 <div class="row"> 3349 <div class="col-12"> 3350 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3> 3351 </div> 3352 <div class="col-12"> 3353 <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"> 3354 @productRewardButtonText 3355 </a> 3356 @if ( !hideRequestmoreinformation ) 3357 { 3358 <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"> 3359 @Translate("Talk with a Dechra member","Talk with a Dechra member") 3360 </button> 3361 } 3362 @if ( showRewardAdditionalLink ) 3363 { 3364 <p class="mb-1 mt-1 small"> 3365 <a href="@productRewardAdditionalLinkProcessed" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName"> 3366 @Translate("Not a Dechra Rewards Member? Click here", "Not a Dechra Rewards Member? Click here") 3367 </a> 3368 </p> 3369 } 3370 </div> 3371 </div> 3372 } 3373 else 3374 { 3375 if ( !hideRequestmoreinformation ) 3376 { 3377 <div class="row"> 3378 <div class="col-12"> 3379 <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"> 3380 @Translate( "Request more information", "Request more information" ) 3381 </button> 3382 </div> 3383 </div> 3384 } 3385 } 3386 </div> 3387 </div> 3388 } 3389 3390 int productPanelsItemId = 0; 3391 3392 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId)) 3393 { 3394 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId); 3395 3396 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId"> 3397 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations) 3398 { 3399 string productPanelNameValue = productPanel.GetValue<string>("Name"); 3400 3401 if(productPanelNameValue == "Premium Content") 3402 { 3403 <div class="col-12" id="js-dvp-product-premium-content"> 3404 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3405 <div class="row"> 3406 <div class="col-12 is-loading"> 3407 <div class="e-loading-spinner"></div> 3408 </div> 3409 </div> 3410 </div> 3411 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template"> 3412 <div class="js-dvp-product-premium-content-animate fade"> 3413 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3414 <div class="row"> 3415 <div class="col-12 col-md-4"> 3416 <div class="e-product-section-header"> 3417 <h2 class="mb-1 mb-md-0"> 3418 @Translate("Premium Content","Premium Content") 3419 </h2> 3420 </div> 3421 </div> 3422 <div class="col-12 col-md-8 mt-half"> 3423 {{#each premiumPages}} 3424 <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}}"> 3425 <div class="col-12 col-md-6"> 3426 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 3427 </div> 3428 <div class="col-12 col-md-6"> 3429 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 3430 <p>{{searchFriendlyDescription}}</p> 3431 <p> 3432 <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}}"> 3433 {{searchFriendlyButtonText}} 3434 </a> 3435 </p> 3436 </div> 3437 </div> 3438 {{/each}} 3439 </div> 3440 </div> 3441 </div> 3442 </div> 3443 </script> 3444 </div> 3445 } 3446 else if(productPanelNameValue == "Supportmaterials for vets") 3447 { 3448 <div class="col-12" id="js-dvp-product-supportmaterials-vets"> 3449 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3450 <div class="row"> 3451 <div class="col-12 is-loading"> 3452 <div class="e-loading-spinner"></div> 3453 </div> 3454 </div> 3455 </div> 3456 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template"> 3457 <div class="js-dvp-product-supportmaterials-vets-animate fade"> 3458 {{#if vetSupportmaterials.items}} 3459 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3460 <div class="row"> 3461 {{#if vetSupportmaterials.display}} 3462 <div class="col-12 col-md-4"> 3463 <div class="e-product-section-header"> 3464 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2> 3465 </div> 3466 </div> 3467 <div class="col-12 col-md-8 mt-half"> 3468 {{#each vetSupportmaterials.items}} 3469 3470 <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}}"> 3471 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 3472 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 3473 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 3474 </p> 3475 3476 <div class="row"> 3477 <div class="col-12"> 3478 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}"> 3479 <div class="row"> 3480 <div class="col-12 pl-md-3"> 3481 <div class="row"> 3482 {{#each materials}} 3483 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 3484 <div class="row"> 3485 <div class="col-12 col-md-6 text-center"> 3486 {{#if download}} 3487 {{#if loginToDownload}} 3488 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 3489 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3490 </a> 3491 {{else}} 3492 <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"> 3493 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3494 </a> 3495 {{/if}} 3496 {{else}} 3497 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3498 {{/if}} 3499 </div> 3500 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 3501 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 3502 3503 {{#if loginToDownload}} 3504 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 3505 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download") 3506 </a> 3507 {{else}} 3508 <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"> 3509 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 3510 </a> 3511 {{/if}} 3512 3513 @if(shopIsActive && hasAccess) 3514 { 3515 @:{{#if orderable}} 3516 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 3517 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 3518 <input type="hidden" name="CartCmd" value="Add"> 3519 <input type="hidden" name="ProductID" value="{{id}}"> 3520 <input type="hidden" name="VariantID" value=""> 3521 <input type="hidden" name="UnitID" value=""> 3522 <input type="hidden" name="Redirect" value="false"> 3523 <input type="hidden" name="Quantity" value="1"> 3524 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 3525 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 3526 </form> 3527 @:{{/if}} 3528 } 3529 </div> 3530 </div> 3531 </div> 3532 {{/each}} 3533 </div> 3534 </div> 3535 </div> 3536 </div> 3537 </div> 3538 </div> 3539 {{/each}} 3540 </div> 3541 {{else}} 3542 <div class="col-12 text-center"> 3543 <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> 3544 <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> 3545 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 3546 <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> 3547 </div> 3548 {{/if}} 3549 </div> 3550 </div> 3551 {{/if}} 3552 </div> 3553 </script> 3554 3555 </div> 3556 } 3557 else if(productPanelNameValue == "Supportmaterials for pet owners") 3558 { 3559 <div class="col-12" id="js-dvp-product-supportmaterials-clients"> 3560 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3561 <div class="row"> 3562 <div class="col-12 is-loading"> 3563 <div class="e-loading-spinner"></div> 3564 </div> 3565 </div> 3566 </div> 3567 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template"> 3568 <div class="js-dvp-product-supportmaterials-clients-animate fade"> 3569 {{#if clientSupportmaterials.items}} 3570 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3571 <div class="row"> 3572 {{#if clientSupportmaterials.display}} 3573 <div class="col-12 col-md-4"> 3574 <div class="e-product-section-header"> 3575 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2> 3576 </div> 3577 </div> 3578 <div class="col-12 col-md-8 mt-half"> 3579 {{#each clientSupportmaterials.items}} 3580 3581 <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}}"> 3582 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 3583 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 3584 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 3585 </p> 3586 3587 <div class="row"> 3588 <div class="col-12"> 3589 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}"> 3590 <div class="row"> 3591 <div class="col-12 pl-md-3"> 3592 <div class="row"> 3593 {{#each materials}} 3594 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 3595 <div class="row"> 3596 <div class="col-12 col-md-6 text-center"> 3597 {{#if download}} 3598 {{#if loginToDownload}} 3599 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 3600 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3601 </a> 3602 {{else}} 3603 <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"> 3604 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3605 </a> 3606 {{/if}} 3607 {{else}} 3608 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3609 {{/if}} 3610 </div> 3611 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 3612 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 3613 {{#if download}} 3614 <p class="mb-1"> 3615 {{#if loginToDownload}} 3616 <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> 3617 {{else}} 3618 <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"> 3619 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 3620 </a> 3621 {{/if}} 3622 </p> 3623 {{/if}} 3624 3625 @if(shopIsActive && hasAccess) 3626 { 3627 @:{{#if orderable}} 3628 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 3629 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 3630 <input type="hidden" name="CartCmd" value="Add"> 3631 <input type="hidden" name="ProductID" value="{{id}}"> 3632 <input type="hidden" name="VariantID" value=""> 3633 <input type="hidden" name="UnitID" value=""> 3634 <input type="hidden" name="Redirect" value="false"> 3635 <input type="hidden" name="Quantity" value="1"> 3636 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 3637 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 3638 </form> 3639 @:{{/if}} 3640 } 3641 3642 </div> 3643 </div> 3644 </div> 3645 {{/each}} 3646 </div> 3647 </div> 3648 </div> 3649 </div> 3650 </div> 3651 </div> 3652 {{/each}} 3653 </div> 3654 {{else}} 3655 <div class="col-12 text-center"> 3656 <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> 3657 <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> 3658 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 3659 <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> 3660 </div> 3661 {{/if}} 3662 </div> 3663 </div> 3664 {{/if}} 3665 </div> 3666 </script> 3667 3668 </div> 3669 } 3670 else if(productPanelNameValue == "Videos") 3671 { 3672 <div class="col-12" id="js-dvp-product-videos"> 3673 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3674 <div class="row"> 3675 <div class="col-12 is-loading"> 3676 <div class="e-loading-spinner"></div> 3677 </div> 3678 </div> 3679 </div> 3680 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template"> 3681 <div class="js-dvp-product-videos-animate fade"> 3682 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3683 <div class="row"> 3684 {{#if display}} 3685 <div class="col-12 col-md-4"> 3686 <div class="e-product-section-header"> 3687 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2> 3688 </div> 3689 </div> 3690 <div class="col-12 col-md-8 mt-half"> 3691 {{#compare totalVideoCount '>' 4}} 3692 <div class="collapse-peek"> 3693 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos"> 3694 {{/compare}} 3695 <div class="row"> 3696 {{#each videos}} 3697 {{#each videos}} 3698 <div class="col-12 col-md-6"> 3699 <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}}}"> 3700 <div> 3701 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" /> 3702 <p class="text-center mt-1 mb-3">{{embedTitle}}</p> 3703 </div> 3704 </a> 3705 <sc{{handlebarHack}}ript type="application/json"> 3706 { 3707 "url":"{{../url}}", 3708 "header":"{{embedTitle}}", 3709 "embedUrl":"{{{embedUrl}}}" 3710 } 3711 </sc{{handlebarHack}}ript> 3712 </div> 3713 {{/each}} 3714 {{/each}} 3715 </div> 3716 {{#compare totalVideoCount '>' 4}} 3717 </div> 3718 <div class="collapse-peek-toggle"> 3719 <div class="row"> 3720 <div class="col-12 mx-auto text-center"> 3721 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos"> 3722 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span> 3723 </a> 3724 </div> 3725 </div> 3726 </div> 3727 {{/compare}} 3728 </div> 3729 </div> 3730 {{else}} 3731 <div class="col-12 text-center"> 3732 <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> 3733 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p> 3734 <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> 3735 </div> 3736 {{/if}} 3737 </div> 3738 </div> 3739 </div> 3740 </script> 3741 </div> 3742 } 3743 else if(productPanelNameValue == "Related ranges") 3744 { 3745 <div class="col-12"> 3746 @if( GetLoop("RelatedRanges").Count() > 0 ) 3747 { 3748 string relatedProductsHeader = Translate("Other related products","Other related products"); 3749 3750 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value"))) 3751 { 3752 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value"); 3753 } 3754 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3755 <div class="row"> 3756 <div class="col-12 col-md-4"> 3757 <div class="e-product-section-header"> 3758 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2> 3759 </div> 3760 </div> 3761 <div class="col-12 col-md-8 mt-half dvp-ranges-list"> 3762 <div class="row"> 3763 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges")) 3764 { 3765 string relatedRangeGroupId = ""; 3766 3767 int relatedProductInt = 0; 3768 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count(); 3769 string relatedRangeName = relatedRange.GetString("Range"); 3770 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>"); 3771 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-"); 3772 3773 <div class="col-12 col-lg-6 mb-3"> 3774 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")"> 3775 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3> 3776 </div> 3777 <div class="col-12 px-1 pt-1 border dvp-range"> 3778 <div> 3779 <div class="row"> 3780 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange")) 3781 { 3782 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId; 3783 3784 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage"); 3785 3786 if(relatedProductInt == 2) 3787 { 3788 @:</div> 3789 @:</div> 3790 @:<div class="collapse" id="range-@relatedRangeNameCleaned"> 3791 @:<div class="row"> 3792 } 3793 3794 string relatedUrl = string.Empty; 3795 3796 string relatedUrlFriendlyProduct = string.Empty; 3797 3798 string relatedProductName = product.GetString("Ecom:Product.Name"); 3799 3800 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName"); 3801 3802 string relatedProductDisplayName = relatedProductName; 3803 string relatedProductTitleName = relatedProductName; 3804 3805 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 3806 { 3807 if(hideRelatedProductName) 3808 { 3809 relatedProductDisplayName = relatedRangeNameSuperscripted; 3810 relatedProductTitleName = relatedRangeName; 3811 } 3812 else 3813 { 3814 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName; 3815 relatedProductTitleName = relatedRangeName + " " + relatedProductName; 3816 } 3817 } 3818 3819 if(product.GetBoolean("Ecom:Product:Field.IsDiets")) 3820 { 3821 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 3822 } 3823 else 3824 { 3825 relatedUrl = relatedProductName; 3826 } 3827 3828 if(relatedProductsInRangeCount > 1) 3829 { 3830 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-"); 3831 } 3832 3833 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 3834 3835 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct; 3836 3837 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center"> 3838 <a href="@relatedProductUrl" title="@relatedProductTitleName"> 3839 <div class="row"> 3840 <div class="col-12 dvp-image-container"> 3841 <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"> 3842 </div> 3843 <div class="col-12"> 3844 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p> 3845 </div> 3846 </div> 3847 </a> 3848 </div> 3849 3850 relatedProductInt++; 3851 } 3852 </div> 3853 </div> 3854 <div class="row mt-1 dvp-view-more-products"> 3855 @if(relatedProductsInRangeCount > 2) 3856 { 3857 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2; 3858 3859 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products"); 3860 3861 if(relatedProductsInRangeCount == 3 ) 3862 { 3863 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product"); 3864 } 3865 3866 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString()); 3867 3868 <div class="col-12"> 3869 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more"> 3870 <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);"> 3871 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span> 3872 <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> 3873 </a> 3874 </p> 3875 </div> 3876 } 3877 </div> 3878 </div> 3879 </div> 3880 } 3881 </div> 3882 </div> 3883 </div> 3884 </div> 3885 } 3886 </div> 3887 } 3888 else if(productPanelNameValue == "Newsletter") 3889 { 3890 <div class="col-12"> 3891 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3892 <div class="row"> 3893 <div class="col-12 col-md-4"> 3894 <div class="e-product-section-header"> 3895 <h2 class="mb-1 mb-md-0">Newsletter</h2> 3896 </div> 3897 </div> 3898 <div class="col-12 col-md-8"> 3899 <div class="dvp-newsletter-signup-form"> 3900 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide"> 3901 <div class="form-group"> 3902 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label> 3903 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter"> 3904 </div> 3905 <div class="form-group"> 3906 <button type="submit" class="btn btn-primary">Sign up</button> 3907 </div> 3908 </form> 3909 </div> 3910 </div> 3911 </div> 3912 </div> 3913 </div> 3914 } 3915 else if(productPanelNameValue == "eLearning") 3916 { 3917 <div class="col-12" id="js-dvp-product-elearning"> 3918 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3919 <div class="row"> 3920 <div class="col-12 is-loading"> 3921 <div class="e-loading-spinner"></div> 3922 </div> 3923 </div> 3924 </div> 3925 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template"> 3926 <div class="js-dvp-product-elearning-animate fade"> 3927 {{#if elearning.items}} 3928 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3929 <div class="row"> 3930 <div class="col-12 col-md-4"> 3931 <div class="e-product-section-header"> 3932 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2> 3933 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" /> 3934 </div> 3935 </div> 3936 <div class="col-12 col-md-8"> 3937 <h3> 3938 {{elearning.items.0.courseAmountText}} 3939 </h3> 3940 <div class="row"> 3941 <div class="col-12"> 3942 <div class="list-group"> 3943 {{#if elearning.display}} 3944 {{#each elearning.items.0.courses}} 3945 <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}}"> 3946 <b>{{name}}</b> 3947 </a> 3948 {{/each}} 3949 {{else}} 3950 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p> 3951 <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> 3952 {{/if}} 3953 </div> 3954 </div> 3955 </div> 3956 {{#unless elearning.display}} 3957 <div class="row mt-2"> 3958 <div class="col-12"> 3959 <div class="bg-academy"> 3960 <div class="row p-2"> 3961 @{ 3962 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString(); 3963 } 3964 <div class="col-12"> 3965 <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> 3966 </div> 3967 <div class="col-12 col-md-8 text-white"> 3968 <ul class="mb-0"> 3969 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li> 3970 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li> 3971 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li> 3972 </ul> 3973 </div> 3974 <div class="col-12 col-md-4 pt-2"> 3975 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p> 3976 </div> 3977 </div> 3978 </div> 3979 </div> 3980 </div> 3981 {{/unless}} 3982 </div> 3983 </div> 3984 </div> 3985 {{/if}} 3986 </div> 3987 </script> 3988 </div> 3989 } 3990 else if(productPanelNameValue == "Product Websites") 3991 { 3992 <div class="col-12" id="js-dvp-product-websites"> 3993 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3994 <div class="row"> 3995 <div class="col-12 is-loading"> 3996 <div class="e-loading-spinner"></div> 3997 </div> 3998 </div> 3999 </div> 4000 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template"> 4001 <div class="js-dvp-product-websites-animate fade"> 4002 {{#if websites.items}} 4003 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4004 <div class="row"> 4005 {{#if websites.display}} 4006 <div class="col-12 col-md-4"> 4007 <div class="e-product-section-header"> 4008 <h2 class="mb-1 mb-md-0"> 4009 {{#compare count '>' 1}} 4010 @Translate("Product Websites","Product Websites") 4011 {{else}} 4012 @Translate("Product Website","Product Website") 4013 {{/compare}} 4014 </h2> 4015 </div> 4016 </div> 4017 <div class="col-12 col-md-8 mt-half"> 4018 {{#each websites.items.0.website}} 4019 <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}}"> 4020 <div class="col-12 col-md-6"> 4021 <p class="lead"> 4022 {{name}} 4023 </p> 4024 <p> 4025 <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}}"> 4026 @Translate("Go to website","Go to website") 4027 </a> 4028 </p> 4029 </div> 4030 <div class="col-12 col-md-6"> 4031 <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}}"> 4032 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" /> 4033 </a> 4034 </div> 4035 </div> 4036 {{/each}} 4037 </div> 4038 {{else}} 4039 <div class="col-12 text-center"> 4040 <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> 4041 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p> 4042 <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> 4043 </div> 4044 {{/if}} 4045 </div> 4046 </div> 4047 {{/if}} 4048 </div> 4049 </script> 4050 </div> 4051 } 4052 else if(productPanelNameValue == "Previous Premium Content") 4053 { 4054 <div class="col-12" id="js-dvp-product-previous-premium-content"> 4055 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4056 <div class="row"> 4057 <div class="col-12 is-loading"> 4058 <div class="e-loading-spinner"></div> 4059 </div> 4060 </div> 4061 </div> 4062 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template"> 4063 <div class="js-dvp-product-previous-premium-content-animate fade"> 4064 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4065 <div class="row"> 4066 <div class="col-12 col-md-4"> 4067 <div class="e-product-section-header"> 4068 <h2 class="mb-1 mb-md-0"> 4069 @Translate("Previous Premium Content","Premium Content") 4070 </h2> 4071 </div> 4072 </div> 4073 <div class="col-12 col-md-8 mt-half"> 4074 {{#each premiumPages}} 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 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 4078 </div> 4079 <div class="col-12 col-md-6"> 4080 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 4081 <p>{{searchFriendlyDescription}}</p> 4082 <p> 4083 <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}}"> 4084 {{searchFriendlyButtonText}} 4085 </a> 4086 </p> 4087 </div> 4088 </div> 4089 {{/each}} 4090 </div> 4091 </div> 4092 </div> 4093 </div> 4094 </script> 4095 </div> 4096 } 4097 else if(productPanelNameValue == "Frequent Treatment Questions") 4098 { 4099 <div class="col-12" id="js-dvp-product-faq"> 4100 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4101 <div class="row"> 4102 <div class="col-12 is-loading"> 4103 <div class="e-loading-spinner"></div> 4104 </div> 4105 </div> 4106 </div> 4107 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template"> 4108 <div class="js-dvp-product-faq-animate fade"> 4109 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4110 <div class="row"> 4111 {{#if display}} 4112 <div class="col-12 col-md-4"> 4113 <div class="e-product-section-header"> 4114 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2> 4115 </div> 4116 </div> 4117 <div class="col-12 col-md-8 mt-half dvp-faq"> 4118 {{# faqs}} 4119 {{#each faq}} 4120 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}"> 4121 <div class="row"> 4122 <div class="col-12"> 4123 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}"> 4124 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 4125 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 4126 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small> 4127 </h3> 4128 </div> 4129 </div> 4130 <div class="row"> 4131 <div class="col-12"> 4132 <div class="collapse" id="collapse-{{paragraphId}}"> 4133 <div class="row"> 4134 <div class="col-12 pl-3"> 4135 {{#each faqList}} 4136 <div class="row"> 4137 <div class="col-12 mt-1"> 4138 <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}}"> 4139 {{listHeader}} 4140 </a> 4141 <sc{{handlebarHack}}ript type="application/json"> 4142 { 4143 "url":"{{../../url}}", 4144 "categoryName": "{{../categoryName}}", 4145 "header":"{{listHeader}}", 4146 "content":"{{{listContent}}}" 4147 } 4148 </sc{{handlebarHack}}ript> 4149 </div> 4150 </div> 4151 {{/each}} 4152 </div> 4153 </div> 4154 </div> 4155 </div> 4156 </div> 4157 </div> 4158 {{/each}} 4159 {{/faqs}} 4160 4161 {{#each accordions}} 4162 <div class="p col-12 p-accordion" id="{{paragraphID}}"> 4163 {{#if introText}} 4164 <div class="p-accordion-lead"> 4165 {{{introText}}} 4166 </div> 4167 {{/if}} 4168 <div class="p-accordion-container "> 4169 {{#each accordionItems}} 4170 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 "> 4171 <div class="p-accordion-toggle"> 4172 <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"> 4173 <span class="p-accordion-toggle-text mb-0 line-height-sm none"> 4174 {{heading}} 4175 </span> 4176 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i> 4177 </p> 4178 </div> 4179 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse"> 4180 <div class="px-2 pb-1 p-accordion-content"> 4181 <div class="p-txt-container dvp-rich-text-content pt-1"> 4182 {{{text}}} 4183 </div> 4184 </div> 4185 </div> 4186 </div> 4187 {{/each}} 4188 </div> 4189 </div> 4190 {{/each}} 4191 4192 4193 </div> 4194 {{else}} 4195 <div class="col-12 text-center"> 4196 <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> 4197 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p> 4198 <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> 4199 </div> 4200 {{/if}} 4201 </div> 4202 </div> 4203 </div> 4204 </script> 4205 </div> 4206 } 4207 else if(productPanelNameValue == "Got More Questions form") 4208 { 4209 <div class="col-12 js-dvp-product-details-more-info-section"> 4210 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4211 <div class="row"> 4212 <div class="col-12 col-md-4"> 4213 <div class="e-product-section-header"> 4214 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2> 4215 </div> 4216 </div> 4217 <div class="p col-12 col-md-8 mt-half"> 4218 @{ 4219 int currentPageId; 4220 4221 int.TryParse(pageId, out currentPageId); 4222 4223 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph; 4224 4225 int currentParagraphId = currentParagraph.GlobalRecordParagraphID; 4226 4227 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString(); 4228 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString(); 4229 4230 int formPageId; 4231 int formParagraphId; 4232 4233 int.TryParse(formPageIdString, out formPageId); 4234 int.TryParse(formParagraphIdString, out formParagraphId); 4235 4236 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId); 4237 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId); 4238 4239 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView); 4240 4241 } 4242 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString) 4243 </div> 4244 </div> 4245 </div> 4246 </div> 4247 } 4248 } 4249 </div> 4250 } 4251 4252 @:</div></div></div></div></div></section></article> 4253 4254 <footer class="bg-light"> 4255 <article> 4256 <section class="e-section"> 4257 <div class="container-fluid"> 4258 <div class="row" id="js-dvp-product-footer"> 4259 @if ( !string.IsNullOrEmpty(productFooterContent) ) 4260 { 4261 <div class="col-12 mt-2 small"> 4262 @productFooterContent 4263 </div> 4264 } 4265 <script id="js-e-handlebars-tmpl-dvp-product-footer" type="text/x-handlebars-template"> 4266 {{#if FooterContent}} 4267 <div class="col-12 mt-2 small"> 4268 {{{FooterContent}}} 4269 </div> 4270 {{/if}} 4271 </script> 4272 </div> 4273 </div> 4274 </section> 4275 </article> 4276 </footer> 4277 4278 } 4279 else if(productType.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductType.Value") == "diet") 4280 { 4281 string rangeName = range.GetString("Range"); 4282 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>"); 4283 string rangeId = string.Empty; 4284 string therapyAreaId = string.Empty; 4285 string therapyAreaName = string.Empty; 4286 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 4287 string optionalName = string.Empty; 4288 string displayName = string.Empty; 4289 string displayNameSuperscripted = string.Empty; 4290 string groupId = string.Empty; 4291 string productName = string.Empty; 4292 string productNameJSON = string.Empty; 4293 string productDisplayName = string.Empty; 4294 string productDisplayNameSuperscripted = string.Empty; 4295 string urlFriendlyProductName = string.Empty; 4296 string productShortDescription = string.Empty; 4297 string productShortDescriptionJSON = string.Empty; 4298 string productColorCode = string.Empty; 4299 string productPublicProductCode = string.Empty; 4300 string productIngredients = string.Empty; 4301 string productIngredientsJSON = string.Empty; 4302 string productPackSize = string.Empty; 4303 string lyticsTopics = string.Empty; 4304 string productDatasheet = string.Empty; 4305 string productRecommendation = string.Empty; 4306 string productNotRecommendedFor = string.Empty; 4307 string productIcon1 = string.Empty; 4308 string productIcon2 = string.Empty; 4309 string productIcon3 = string.Empty; 4310 string productIcon4 = string.Empty; 4311 string productIcon5 = string.Empty; 4312 string productIcon6 = string.Empty; 4313 string productTextArea1 = string.Empty; 4314 string productTextArea2 = string.Empty; 4315 string productTextArea3 = string.Empty; 4316 string productTextArea4 = string.Empty; 4317 string productTextArea5 = string.Empty; 4318 string productTextArea6 = string.Empty; 4319 string productFeedingGuideImage = string.Empty; 4320 string productNutrientTableImage = string.Empty; 4321 Dictionary<string, dynamic> dietDetails = new Dictionary<string, dynamic>(); 4322 Dictionary<string, dynamic> dietFeedingGuides = new Dictionary<string, dynamic>(); 4323 string productImage = string.Empty; 4324 List<string> images = new List<string>(); 4325 string productUrl = string.Empty; 4326 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts"); 4327 bool applyRangeNameToProductNames = Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"); 4328 4329 <div class="row"> 4330 <div class="col-12 d-none d-md-block" id="js-dvp-product-premium-content-highlight"> 4331 <script id="js-e-handlebars-tmpl-dvp-product-premium-content-highlight" type="text/x-handlebars-template"> 4332 {{#if premiumPages.0.searchFriendlyImageBanner}} 4333 <div class="js-dvp-product-premium-content-animate fade mb-2"> 4334 <a href="javascript:void(0);" class="js-dvp-product-details-premium-content-highlight-banner-link"> 4335 <img class="p-img" src="{{premiumPages.0.searchFriendlyImageBanner}}" alt="{{premiumPages.0.searchFriendlyTitle}}" /> 4336 </a> 4337 </div> 4338 {{/if}} 4339 </script> 4340 </div> 4341 </div> 4342 4343 @functions 4344 { 4345 4346 public dynamic DietApi(string method, string productNumber, string cultureInfoName) 4347 { 4348 if ( !string.IsNullOrEmpty( method ) && !string.IsNullOrEmpty( productNumber ) && !string.IsNullOrEmpty( cultureInfoName )) 4349 { 4350 productNumber = Regex.Replace( productNumber, @".*_", "", RegexOptions.None, TimeSpan.FromMilliseconds( 100 ) ); 4351 4352 if ( !string.IsNullOrEmpty( productNumber ) ) 4353 { 4354 System.Net.WebRequest request = System.Net.WebRequest.Create($"https://dietspim.dechra.espresso4.dk/api/dechra-diets/v1/{method}/{productNumber}/{cultureInfoName}"); 4355 request.Timeout = 1000; 4356 request.Method = "GET"; 4357 request.ContentType = "application/json"; 4358 4359 using (dynamic response = (System.Net.HttpWebResponse) request.GetResponse()) 4360 { 4361 using (System.IO.Stream stream = response.GetResponseStream()) 4362 { 4363 using (System.IO.StreamReader reader = new System.IO.StreamReader(stream)) 4364 { 4365 return Newtonsoft.Json.JsonConvert.DeserializeObject(reader.ReadToEnd()); 4366 } 4367 } 4368 } 4369 } 4370 } 4371 return null; 4372 } 4373 4374 } 4375 4376 if(productsInRangeCount > 1) 4377 { 4378 <div class="row e-product"> 4379 <div class="col-12 col-md-6 mb-md-3 pr-sm-3"> 4380 <h1 class="mb-1 font-weight-bold"> 4381 @rangeNameSuperscripted 4382 </h1> 4383 @foreach(LoopItem product in range.GetLoop("ProductsInRange")) 4384 { 4385 groupId = product.GetString("Ecom:Group.ID"); 4386 4387 productName = product.GetString("Ecom:Product.Name"); 4388 productNameJSON = productName.Replace("\"","&quot;"); 4389 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 4390 4391 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 4392 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 4393 4394 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 4395 productDisplayNameSuperscripted = applyRangeNameToProductNames ? $"{displayNameSuperscripted} {productNameJSON}" : productNameJSON; 4396 4397 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-"); 4398 4399 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 4400 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4401 4402 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 4403 4404 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 4405 4406 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 4407 4408 productIngredients = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 4409 productIngredientsJSON = WebUtility.HtmlDecode(Regex.Replace(productIngredients, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4410 4411 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator")); 4412 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value"); 4413 4414 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 4415 4416 productColorCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.ColorCode.Value"); 4417 4418 productPublicProductCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.PublicProductCode.Value"); 4419 4420 productRecommendation = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Recommendation.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4421 productNotRecommendedFor = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NotRecommendedFor.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4422 4423 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" : ""; 4424 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" : ""; 4425 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" : ""; 4426 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" : ""; 4427 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" : ""; 4428 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" : ""; 4429 4430 productTextArea1 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea1.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4431 productTextArea2 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea2.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4432 productTextArea3 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea3.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4433 productTextArea4 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea4.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4434 productTextArea5 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea5.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4435 productTextArea6 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea6.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4436 4437 productFeedingGuideImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.FeedingGuideImage.Value"); 4438 productNutrientTableImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NutrientTableImage.Value"); 4439 4440 productUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}#{urlFriendlyProductName}"; 4441 4442 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 4443 4444 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 4445 4446 if ( !string.IsNullOrEmpty(HttpContext.Current.Request["test"]) && HttpContext.Current.Request["test"] == "true" && !string.IsNullOrEmpty( product.GetString("Ecom:Product.Number") ) ) 4447 { 4448 dietDetails.Add(productDisplayNameSuperscripted, DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name)); 4449 dietFeedingGuides.Add(productDisplayNameSuperscripted, DietApi( "feedingguide", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name)); 4450 } 4451 4452 dynamic JSON = new { 4453 Name = productDisplayName, 4454 ShortDescription = productShortDescriptionJSON, 4455 Image = productImage, 4456 Images = images, 4457 Ingredients = productIngredientsJSON, 4458 PackSize = productPackSize, 4459 Datasheet = productDatasheet, 4460 ColorCode = productColorCode, 4461 ProductCode = productPublicProductCode, 4462 Recommendation = productRecommendation, 4463 NotRecommendedFor = productNotRecommendedFor, 4464 Icon1 = productIcon1, 4465 Icon2 = productIcon2, 4466 Icon3 = productIcon3, 4467 Icon4 = productIcon4, 4468 Icon5 = productIcon5, 4469 Icon6 = productIcon6, 4470 TextArea1 = productTextArea1, 4471 TextArea2 = productTextArea2, 4472 TextArea3 = productTextArea3, 4473 TextArea4 = productTextArea4, 4474 TextArea5 = productTextArea5, 4475 TextArea6 = productTextArea6, 4476 FeedingGuideImage = productFeedingGuideImage, 4477 NutrientTableImage = productNutrientTableImage, 4478 Details = DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name) 4479 }; 4480 4481 <a class="js-dvp-product-list-details" href="@productUrl" title="@productDisplayName" data-productname="@urlFriendlyProductName"> 4482 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span> 4483 <div class="row px-sm-1 my-2 my-sm-0"> 4484 <div class="dvp-product-list-details col-12 p-sm-1 py-1"> 4485 <div class="row"> 4486 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container"> 4487 <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"> 4488 </div> 4489 <div class="col-9 col-sm-8 px-sm-2 my-auto"> 4490 <p class="mb-0"> 4491 @if (applyRangeNameToProductNames) 4492 { 4493 <b>@productDisplayNameSuperscripted</b> 4494 } 4495 else 4496 { 4497 <b class="h3">@displayNameSuperscripted</b> 4498 <br> 4499 @productDisplayNameSuperscripted 4500 } 4501 </p> 4502 </div> 4503 <div class="col-2 d-none d-sm-block my-auto text-center"> 4504 <i class="material-icons material-icons-4x">keyboard_arrow_right</i> 4505 </div> 4506 </div> 4507 <script type="application/json" class="@urlFriendlyProductName"> 4508 @JsonService.Instance.ToJson(JSON) 4509 </script> 4510 </div> 4511 </div> 4512 </a> 4513 } 4514 </div> 4515 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-0 pb-4 pl-sm-3 dvp-product-details"> 4516 <div class="js-dvp-product-details-animate fade"> 4517 <div class="row"> 4518 <div class="col-12"> 4519 <div class="e-product-image-container dvp-product-details-image-container text-center"> 4520 <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"> 4521 </div> 4522 </div> 4523 </div> 4524 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 4525 { 4526 <div class="row"> 4527 <div class="col-12"> 4528 @productShortDescriptionJSON 4529 </div> 4530 </div> 4531 } 4532 <div class="row"> 4533 <div class="col-12 mt-2 table-responsive"> 4534 <table class="table"> 4535 @if(!string.IsNullOrEmpty(productIngredientsJSON)) 4536 { 4537 <tr> 4538 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 4539 <td>@productIngredientsJSON</td> 4540 </tr> 4541 } 4542 @if(!string.IsNullOrEmpty(productRecommendation)) 4543 { 4544 <tr> 4545 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td> 4546 <td>@productRecommendation</td> 4547 </tr> 4548 } 4549 @if(!string.IsNullOrEmpty(productNotRecommendedFor)) 4550 { 4551 <tr> 4552 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td> 4553 <td>@productNotRecommendedFor</td> 4554 </tr> 4555 } 4556 @if(!string.IsNullOrEmpty(productPackSize)) 4557 { 4558 <tr> 4559 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 4560 <td>@productPackSize</td> 4561 </tr> 4562 } 4563 @if(!string.IsNullOrEmpty(productDatasheet)) 4564 { 4565 <tr> 4566 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 4567 <td> 4568 <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"> 4569 @Translate("Download","Download") <i class="material-icons">get_app</i> 4570 </a> 4571 </td> 4572 </tr> 4573 } 4574 </table> 4575 </div> 4576 </div> 4577 @if(!hideRequestmoreinformation) 4578 { 4579 <div class="row"> 4580 <div class="col-12"> 4581 <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"> 4582 @Translate("Request more information","Request more information") 4583 </button> 4584 </div> 4585 </div> 4586 } 4587 </div> 4588 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template"> 4589 <div class="js-dvp-product-details-animate fade"> 4590 <div class="e-product-image-container multi-range"> 4591 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 4592 <div class="carousel-inner{{#if Images}} carousel-multiple-images{{/if}}"> 4593 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 4594 <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"> 4595 </div> 4596 {{#each Images}} 4597 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 4598 <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}}"> 4599 </div> 4600 {{/each}} 4601 </div> 4602 {{#if Images}} 4603 <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> 4604 <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> 4605 <ol class="carousel-indicators"> 4606 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 4607 <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> 4608 </li> 4609 {{#each Images}} 4610 <li data-target="#js-e-product-image-carousel" data-slide-to="{{math @@index "+" 1}}"> 4611 <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> 4612 </li> 4613 {{/each}} 4614 </ol> 4615 {{/if}} 4616 </div> 4617 </div> 4618 {{#if ShortDescription}} 4619 <div class="dvp-short-description"> 4620 {{{ShortDescription}}} 4621 </div> 4622 {{/if}} 4623 <div class="row"> 4624 <div class="col-12 mt-2 table-responsive"> 4625 <table class="table"> 4626 {{#if Ingredients}} 4627 <tr> 4628 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 4629 <td>{{{Ingredients}}}</td> 4630 </tr> 4631 {{/if}} 4632 {{#if Recommendation}} 4633 <tr> 4634 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td> 4635 <td>{{{Recommendation}}}</td> 4636 </tr> 4637 {{/if}} 4638 {{#if NotRecommendedFor}} 4639 <tr> 4640 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td> 4641 <td>{{{NotRecommendedFor}}}</td> 4642 </tr> 4643 {{/if}} 4644 {{#if PackSize}} 4645 <tr> 4646 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 4647 <td>{{PackSize}}</td> 4648 </tr> 4649 {{/if}} 4650 {{#if Datasheet}} 4651 <tr> 4652 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 4653 <td> 4654 <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}}"> 4655 @Translate("Download","Download") <i class="material-icons">get_app</i> 4656 </a> 4657 </td> 4658 </tr> 4659 {{/if}} 4660 </table> 4661 </div> 4662 </div> 4663 <div class="row"> 4664 {{#if Details}} 4665 {{#each Details}} 4666 <div class="col-12"> 4667 <div class="row mb-2"> 4668 <div class="col-6 col-md-2"> 4669 <div style="background-color:{{../ColorCode}};" class="rounded text-center text-white"> 4670 <i class="dechra-details-icon dechra-icon-{{IconCssClass}}"></i> 4671 </div> 4672 </div> 4673 <div class="col-12 col-md-10 d-flex align-items-center"> 4674 <p class="mb-0">{{{Description}}}</p> 4675 </div> 4676 </div> 4677 </div> 4678 {{/each}} 4679 {{else}} 4680 {{#if Icon1}} 4681 <div class="col-12"> 4682 <div class="row mb-2"> 4683 <div class="col-6 col-md-2"> 4684 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4685 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon1}}" /> 4686 </div> 4687 </div> 4688 <div class="col-12 col-md-10 d-flex align-items-center"> 4689 <p class="mb-0">{{{TextArea1}}}</p> 4690 </div> 4691 </div> 4692 </div> 4693 {{/if}} 4694 {{#if Icon2}} 4695 <div class="col-12"> 4696 <div class="row mb-2"> 4697 <div class="col-6 col-md-2"> 4698 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4699 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon2}}" /> 4700 </div> 4701 </div> 4702 <div class="col-12 col-md-10 d-flex align-items-center"> 4703 <p class="mb-0">{{{TextArea2}}}</p> 4704 </div> 4705 </div> 4706 </div> 4707 {{/if}} 4708 {{#if Icon3}} 4709 <div class="col-12"> 4710 <div class="row mb-2"> 4711 <div class="col-6 col-md-2"> 4712 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4713 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon3}}" /> 4714 </div> 4715 </div> 4716 <div class="col-12 col-md-10 d-flex align-items-center"> 4717 <p class="mb-0">{{{TextArea3}}}</p> 4718 </div> 4719 </div> 4720 </div> 4721 {{/if}} 4722 {{#if Icon4}} 4723 <div class="col-12"> 4724 <div class="row mb-2"> 4725 <div class="col-6 col-md-2"> 4726 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4727 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon4}}" /> 4728 </div> 4729 </div> 4730 <div class="col-12 col-md-10 d-flex align-items-center"> 4731 <p class="mb-0">{{{TextArea4}}}</p> 4732 </div> 4733 </div> 4734 </div> 4735 {{/if}} 4736 {{#if Icon5}} 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="{{Icon5}}" /> 4742 </div> 4743 </div> 4744 <div class="col-12 col-md-10 d-flex align-items-center"> 4745 <p class="mb-0">{{{TextArea5}}}</p> 4746 </div> 4747 </div> 4748 </div> 4749 {{/if}} 4750 {{#if Icon6}} 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="{{Icon6}}" /> 4756 </div> 4757 </div> 4758 <div class="col-12 col-md-10 d-flex align-items-center"> 4759 <p class="mb-0">{{{TextArea6}}}</p> 4760 </div> 4761 </div> 4762 </div> 4763 {{/if}} 4764 {{/if}} 4765 </div> 4766 @if(!hideRequestmoreinformation) 4767 { 4768 <div class="row"> 4769 <div class="col-12"> 4770 <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"> 4771 @Translate("Request more information","Request more information") 4772 </button> 4773 </div> 4774 </div> 4775 } 4776 </div> 4777 </script> 4778 </div> 4779 </div> 4780 } 4781 else 4782 { 4783 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 4784 { 4785 groupId = product.GetString("Ecom:Group.ID"); 4786 4787 productName = product.GetString("Ecom:Product.Name"); 4788 productNameJSON = productName.Replace("\"","&quot;"); 4789 4790 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 4791 4792 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 4793 4794 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 4795 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 4796 4797 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 4798 4799 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 4800 4801 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 4802 4803 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 4804 4805 productIngredients = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 4806 4807 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator")); 4808 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value"); 4809 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 4810 4811 productColorCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.ColorCode.Value"); 4812 4813 productPublicProductCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.PublicProductCode.Value"); 4814 4815 productRecommendation = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Recommendation.Value"); 4816 productNotRecommendedFor = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NotRecommendedFor.Value"); 4817 4818 productIcon1 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon1.Value").Replace("http://","") + ".svg"; 4819 productIcon2 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon2.Value").Replace("http://","") + ".svg"; 4820 productIcon3 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon3.Value").Replace("http://","") + ".svg"; 4821 productIcon4 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon4.Value").Replace("http://","") + ".svg"; 4822 productIcon5 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon5.Value").Replace("http://","") + ".svg"; 4823 productIcon6 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon6.Value").Replace("http://","") + ".svg"; 4824 4825 productTextArea1 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea1.Value"); 4826 productTextArea2 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea2.Value"); 4827 productTextArea3 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea3.Value"); 4828 productTextArea4 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea4.Value"); 4829 productTextArea5 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea5.Value"); 4830 productTextArea6 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea6.Value"); 4831 4832 productFeedingGuideImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.FeedingGuideImage.Value"); 4833 productNutrientTableImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NutrientTableImage.Value"); 4834 4835 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 4836 4837 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 4838 4839 if ( !string.IsNullOrEmpty(HttpContext.Current.Request["test"]) && HttpContext.Current.Request["test"] == "true" && !string.IsNullOrEmpty( product.GetString("Ecom:Product.Number") ) ) 4840 { 4841 dietDetails.Add(rangeNameSuperscripted, DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name)); 4842 dietFeedingGuides.Add(rangeNameSuperscripted, DietApi( "feedingguide", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name)); 4843 } 4844 } 4845 <div class="row e-product dvp-product-details"> 4846 <div class="col-12"> 4847 <div class="row"> 4848 <div class="col-12"> 4849 <h1 class="mb-1 font-weight-bold"> 4850 @rangeNameSuperscripted 4851 </h1> 4852 </div> 4853 </div> 4854 </div> 4855 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4"> 4856 <div class="row"> 4857 <div class="col-12"> 4858 <div class="e-product-image-container single-range"> 4859 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 4860 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")"> 4861 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 4862 <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"> 4863 </div> 4864 4865 @for(int i = 0; i < images.Count(); i++) 4866 { 4867 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 4868 <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)"> 4869 </div> 4870 } 4871 </div> 4872 @if(images.Any()) 4873 { 4874 <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> 4875 <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> 4876 <ol class="carousel-indicators"> 4877 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 4878 <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> 4879 </li> 4880 @for(int i = 0; i < images.Count(); i++) 4881 { 4882 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)"> 4883 <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> 4884 </li> 4885 } 4886 </ol> 4887 } 4888 </div> 4889 </div> 4890 </div> 4891 </div> 4892 </div> 4893 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3"> 4894 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span> 4895 @if(!string.IsNullOrEmpty(optionalName)) 4896 { 4897 <div class="row"> 4898 <div class="col-12"> 4899 <h2 class="mb-0">@displayNameSuperscripted</h2> 4900 </div> 4901 </div> 4902 } 4903 @if(!string.IsNullOrEmpty(productShortDescription)) 4904 { 4905 <div class="row"> 4906 <div class="col-12"> 4907 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")) 4908 </div> 4909 </div> 4910 } 4911 <div class="row"> 4912 <div class="col-12 mt-2 table-responsive"> 4913 <table class="table"> 4914 @if(!string.IsNullOrEmpty(productIngredients)) 4915 { 4916 <tr> 4917 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 4918 <td>@productIngredients</td> 4919 </tr> 4920 } 4921 @if(!string.IsNullOrEmpty(productRecommendation)) 4922 { 4923 <tr> 4924 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td> 4925 <td>@productRecommendation</td> 4926 </tr> 4927 } 4928 @if(!string.IsNullOrEmpty(productNotRecommendedFor)) 4929 { 4930 <tr> 4931 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td> 4932 <td>@productNotRecommendedFor</td> 4933 </tr> 4934 } 4935 @if(!string.IsNullOrEmpty(productPackSize)) 4936 { 4937 <tr> 4938 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 4939 <td>@productPackSize</td> 4940 </tr> 4941 } 4942 @if(!string.IsNullOrEmpty(productDatasheet)) 4943 { 4944 <tr> 4945 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 4946 <td> 4947 <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"> 4948 @Translate("Download","Download") <i class="material-icons">get_app</i> 4949 </a> 4950 </td> 4951 </tr> 4952 } 4953 4954 </table> 4955 </div> 4956 </div> 4957 @if(!hideRequestmoreinformation) 4958 { 4959 <div class="row"> 4960 <div class="col-12"> 4961 <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"> 4962 @Translate("Request more information","Request more information") 4963 </button> 4964 </div> 4965 </div> 4966 } 4967 </div> 4968 @if ( dietDetails.Count == 0 ) 4969 { 4970 if ( !string.IsNullOrEmpty( productIcon1 ) && !string.IsNullOrEmpty( productTextArea1 ) ) 4971 { 4972 <div class="col-12 col-md-6"> 4973 <div class="row mb-2"> 4974 <div class="col-6 col-md-2"> 4975 <div style="background-color:@productColorCode;" class="rounded p-1"> 4976 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon1"/> 4977 </div> 4978 </div> 4979 <div class="col-12 col-md-10 d-flex align-items-center"> 4980 <p class="mb-0">@productTextArea1</p> 4981 </div> 4982 </div> 4983 </div> 4984 } 4985 if ( !string.IsNullOrEmpty( productIcon2 ) && !string.IsNullOrEmpty( productTextArea2 ) ) 4986 { 4987 <div class="col-12 col-md-6"> 4988 <div class="row mb-2"> 4989 <div class="col-6 col-md-2"> 4990 <div style="background-color:@productColorCode;" class="rounded p-1"> 4991 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon2"/> 4992 </div> 4993 </div> 4994 <div class="col-12 col-md-10 d-flex align-items-center"> 4995 <p class="mb-0">@productTextArea2</p> 4996 </div> 4997 </div> 4998 </div> 4999 } 5000 if ( !string.IsNullOrEmpty( productIcon3 ) && !string.IsNullOrEmpty( productTextArea3 ) ) 5001 { 5002 <div class="col-12 col-md-6"> 5003 <div class="row mb-2"> 5004 <div class="col-6 col-md-2"> 5005 <div style="background-color:@productColorCode;" class="rounded p-1"> 5006 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon3"/> 5007 </div> 5008 </div> 5009 <div class="col-12 col-md-10 d-flex align-items-center"> 5010 <p class="mb-0">@productTextArea3</p> 5011 </div> 5012 </div> 5013 </div> 5014 } 5015 if ( !string.IsNullOrEmpty( productIcon4 ) && !string.IsNullOrEmpty( productTextArea4 ) ) 5016 { 5017 <div class="col-12 col-md-6"> 5018 <div class="row mb-2"> 5019 <div class="col-6 col-md-2"> 5020 <div style="background-color:@productColorCode;" class="rounded p-1"> 5021 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon4"/> 5022 </div> 5023 </div> 5024 <div class="col-12 col-md-10 d-flex align-items-center"> 5025 <p class="mb-0">@productTextArea4</p> 5026 </div> 5027 </div> 5028 </div> 5029 } 5030 if ( !string.IsNullOrEmpty( productIcon5 ) && !string.IsNullOrEmpty( productTextArea5 ) ) 5031 { 5032 <div class="col-12 col-md-6"> 5033 <div class="row mb-2"> 5034 <div class="col-6 col-md-2"> 5035 <div style="background-color:@productColorCode;" class="rounded p-1"> 5036 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon5"/> 5037 </div> 5038 </div> 5039 <div class="col-12 col-md-10 d-flex align-items-center"> 5040 <p class="mb-0">@productTextArea5</p> 5041 </div> 5042 </div> 5043 </div> 5044 } 5045 if ( !string.IsNullOrEmpty( productIcon6 ) && !string.IsNullOrEmpty( productTextArea6 ) ) 5046 { 5047 <div class="col-12 col-md-6"> 5048 <div class="row mb-2"> 5049 <div class="col-6 col-md-2"> 5050 <div style="background-color:@productColorCode;" class="rounded p-1"> 5051 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon6"/> 5052 </div> 5053 </div> 5054 <div class="col-12 col-md-10 d-flex align-items-center"> 5055 <p class="mb-0">@productTextArea6</p> 5056 </div> 5057 </div> 5058 </div> 5059 } 5060 } 5061 </div> 5062 5063 if ( !string.IsNullOrEmpty( productFeedingGuideImage ) && string.IsNullOrEmpty(HttpContext.Current.Request["test"])) 5064 { 5065 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2"> 5066 <div class="row"> 5067 <div class="col-12 col-md-4"> 5068 <div class="e-product-section-header"> 5069 <h2 class="mb-1 mb-md-0">@Translate( "Feeding guide", "Feeding guide" )</h2> 5070 </div> 5071 </div> 5072 <div class="col-12 col-md-8"> 5073 <img src="@productFeedingGuideImage" class="p-img"/> 5074 </div> 5075 </div> 5076 </div> 5077 } 5078 if(!string.IsNullOrEmpty(productNutrientTableImage)) 5079 { 5080 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5081 <div class="row"> 5082 <div class="col-12 col-md-4"> 5083 <div class="e-product-section-header"> 5084 <h2 class="mb-1 mb-md-0">@Translate("Nutrient table","Nutrient table")</h2> 5085 </div> 5086 </div> 5087 <div class="col-12 col-md-8"> 5088 <img src="@productNutrientTableImage" class="p-img" /> 5089 </div> 5090 </div> 5091 </div> 5092 } 5093 } 5094 5095 if ( dietDetails.Count > 0 ) 5096 { 5097 int tabCounter = 0; 5098 5099 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 pt-2 pt-md-4 mt-2"> 5100 @if ( dietDetails.Count > 1 ) 5101 { 5102 int tabLinkCounter = 0; 5103 5104 <div class="row mb-3"> 5105 <div class="col-12"> 5106 <div class="list-group flex-column flex-md-row" style="background-color: @productColorCode;border-color: @productColorCode;" role="tablist"> 5107 @foreach ( KeyValuePair< string, dynamic > dietDetail in dietDetails ) 5108 { 5109 <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"> 5110 @dietDetail.Key 5111 <i class="material-icons d-block d-md-none">keyboard_arrow_right</i> 5112 <i class="material-icons d-none d-md-block">keyboard_arrow_down</i> 5113 </a> 5114 5115 tabLinkCounter++; 5116 } 5117 </div> 5118 </div> 5119 </div> 5120 } 5121 @foreach ( KeyValuePair<string, dynamic> dietDetail in dietDetails ) 5122 { 5123 if ( dietDetails.Count > 1 ) 5124 { 5125 if ( tabCounter == 0 ) 5126 { 5127 @:<div class="tab-content"> 5128 } 5129 @:<div class="tab-pane fade@(tabCounter == 0 ? " active show" : "")" id="tab-details-@dietDetail.Key.Replace(" ","-")" role="tabpanel"> 5130 @:<div class="row"> 5131 } 5132 else 5133 { 5134 @:<div class="row"> 5135 } 5136 foreach ( dynamic detail in dietDetail.Value ) 5137 { 5138 if ( detail.IconCssClass != null && detail.Description != null ) 5139 { 5140 <div class="col-12 col-md-6"> 5141 <div class="row mb-2"> 5142 <div class="col-6 col-md-2"> 5143 <div style="background-color:@productColorCode;" class="rounded text-center text-white"> 5144 <i class="dechra-details-icon dechra-icon-@detail.IconCssClass"></i> 5145 </div> 5146 </div> 5147 <div class="col-12 col-md-10 d-flex align-items-center"> 5148 <p class="mb-0">@detail.Description</p> 5149 </div> 5150 </div> 5151 </div> 5152 } 5153 } 5154 if ( dietDetails.Count > 1 ) 5155 { 5156 @:</div> 5157 @:</div> 5158 5159 tabCounter++; 5160 5161 if(tabCounter == dietDetails.Count) 5162 { 5163 @:</div> 5164 } 5165 } 5166 else 5167 { 5168 @:</div> 5169 } 5170 } 5171 </div> 5172 } 5173 5174 if ( dietFeedingGuides.Count > 0 ) 5175 { 5176 int tabCounter = 0; 5177 5178 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2"> 5179 <div class="row"> 5180 <div class="col-12 col-md-4"> 5181 @if ( dietFeedingGuides.Count > 1 ) 5182 { 5183 int tabLinkCounter = 0; 5184 5185 <div class="list-group mb-3" style="background-color: @productColorCode;border-color: @productColorCode;" role="tablist"> 5186 @foreach ( KeyValuePair< string, dynamic > dietFeedingGuide in dietFeedingGuides ) 5187 { 5188 <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"> 5189 @dietFeedingGuide.Key 5190 <i class="material-icons">keyboard_arrow_right</i> 5191 </a> 5192 5193 tabLinkCounter++; 5194 } 5195 </div> 5196 } 5197 else 5198 { 5199 foreach ( KeyValuePair< string, dynamic > dietFeedingGuide in dietFeedingGuides ) 5200 { 5201 foreach ( dynamic guide in dietFeedingGuide.Value ) 5202 { 5203 <div class="e-product-section-header"> 5204 <h2 class="mb-1 mb-md-0">@guide.Name</h2> 5205 </div> 5206 } 5207 } 5208 } 5209 </div> 5210 <div class="col-12 col-md-8"> 5211 @foreach ( KeyValuePair<string, dynamic> dietFeedingGuide in dietFeedingGuides ) 5212 { 5213 foreach ( dynamic guide in dietFeedingGuide.Value ) 5214 { 5215 if ( dietFeedingGuides.Count > 1 ) 5216 { 5217 if ( tabCounter == 0 ) 5218 { 5219 @:<div class="tab-content"> 5220 } 5221 @:<div class="tab-pane fade@(tabCounter == 0 ? " active show" : "")" id="tab-feeding-@dietFeedingGuide.Key.Replace(" ","-")" role="tabpanel"> 5222 <p class="mb-0 h3 text-center">@guide.Name</p> 5223 <p class="mb-1 mt-0 h4 text-center">@dietFeedingGuide.Key</p> 5224 } 5225 <table class="table table-condensed border"> 5226 <thead> 5227 <tr> 5228 @foreach ( dynamic th in guide.Headers ) 5229 { 5230 <th style="background: @productColorCode" class="text-center text-white"> 5231 <img class="p-img" src="@th.Icon" alt="@th.Header"> 5232 <br> 5233 @th.Header 5234 </th> 5235 } 5236 </tr> 5237 </thead> 5238 <tbody> 5239 @foreach ( dynamic tr in guide.Rows ) 5240 { 5241 <tr> 5242 @foreach ( dynamic td in tr.Row ) 5243 { 5244 <td class="text-center"> 5245 @td.Value 5246 </td> 5247 } 5248 </tr> 5249 } 5250 </tbody> 5251 </table> 5252 5253 if ( dietFeedingGuides.Count > 1 ) 5254 { 5255 @:</div> 5256 5257 tabCounter++; 5258 5259 if(tabCounter == dietFeedingGuides.Count) 5260 { 5261 @:</div> 5262 } 5263 } 5264 } 5265 } 5266 </div> 5267 </div> 5268 </div> 5269 } 5270 5271 int productPanelsItemId = 0; 5272 5273 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId)) 5274 { 5275 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId); 5276 5277 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId"> 5278 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations) 5279 { 5280 string productPanelNameValue = productPanel.GetValue<string>("Name"); 5281 5282 if(productPanelNameValue == "Premium Content") 5283 { 5284 <div class="col-12" id="js-dvp-product-premium-content"> 5285 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5286 <div class="row"> 5287 <div class="col-12 is-loading"> 5288 <div class="e-loading-spinner"></div> 5289 </div> 5290 </div> 5291 </div> 5292 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template"> 5293 <div class="js-dvp-product-premium-content-animate fade"> 5294 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5295 <div class="row"> 5296 <div class="col-12 col-md-4"> 5297 <div class="e-product-section-header"> 5298 <h2 class="mb-1 mb-md-0"> 5299 @Translate("Premium Content","Premium Content") 5300 </h2> 5301 </div> 5302 </div> 5303 <div class="col-12 col-md-8 mt-half"> 5304 {{#each premiumPages}} 5305 <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}}"> 5306 <div class="col-12 col-md-6"> 5307 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 5308 </div> 5309 <div class="col-12 col-md-6"> 5310 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 5311 <p>{{searchFriendlyDescription}}</p> 5312 <p> 5313 <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}}"> 5314 {{searchFriendlyButtonText}} 5315 </a> 5316 </p> 5317 </div> 5318 </div> 5319 {{/each}} 5320 </div> 5321 </div> 5322 </div> 5323 </div> 5324 </script> 5325 </div> 5326 } 5327 else if(productPanelNameValue == "Supportmaterials for vets") 5328 { 5329 <div class="col-12" id="js-dvp-product-supportmaterials-vets"> 5330 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5331 <div class="row"> 5332 <div class="col-12 is-loading"> 5333 <div class="e-loading-spinner"></div> 5334 </div> 5335 </div> 5336 </div> 5337 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template"> 5338 <div class="js-dvp-product-supportmaterials-vets-animate fade"> 5339 {{#if vetSupportmaterials.items}} 5340 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5341 <div class="row"> 5342 {{#if vetSupportmaterials.display}} 5343 <div class="col-12 col-md-4"> 5344 <div class="e-product-section-header"> 5345 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2> 5346 </div> 5347 </div> 5348 <div class="col-12 col-md-8 mt-half"> 5349 {{#each vetSupportmaterials.items}} 5350 5351 <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}}"> 5352 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 5353 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 5354 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 5355 </p> 5356 5357 <div class="row"> 5358 <div class="col-12"> 5359 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}"> 5360 <div class="row"> 5361 <div class="col-12 pl-md-3"> 5362 <div class="row"> 5363 {{#each materials}} 5364 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 5365 <div class="row"> 5366 <div class="col-12 col-md-6 text-center"> 5367 {{#if download}} 5368 {{#if loginToDownload}} 5369 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 5370 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5371 </a> 5372 {{else}} 5373 <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"> 5374 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5375 </a> 5376 {{/if}} 5377 {{else}} 5378 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5379 {{/if}} 5380 </div> 5381 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 5382 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 5383 5384 {{#if loginToDownload}} 5385 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 5386 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download") 5387 </a> 5388 {{else}} 5389 <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"> 5390 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 5391 </a> 5392 {{/if}} 5393 5394 @if(shopIsActive && hasAccess) 5395 { 5396 @:{{#if orderable}} 5397 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 5398 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 5399 <input type="hidden" name="CartCmd" value="Add"> 5400 <input type="hidden" name="ProductID" value="{{id}}"> 5401 <input type="hidden" name="VariantID" value=""> 5402 <input type="hidden" name="UnitID" value=""> 5403 <input type="hidden" name="Redirect" value="false"> 5404 <input type="hidden" name="Quantity" value="1"> 5405 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 5406 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 5407 </form> 5408 @:{{/if}} 5409 } 5410 </div> 5411 </div> 5412 </div> 5413 {{/each}} 5414 </div> 5415 </div> 5416 </div> 5417 </div> 5418 </div> 5419 </div> 5420 {{/each}} 5421 </div> 5422 {{else}} 5423 <div class="col-12 text-center"> 5424 <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> 5425 <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> 5426 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 5427 <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> 5428 </div> 5429 {{/if}} 5430 </div> 5431 </div> 5432 {{/if}} 5433 </div> 5434 </script> 5435 5436 </div> 5437 } 5438 else if(productPanelNameValue == "Supportmaterials for pet owners") 5439 { 5440 <div class="col-12" id="js-dvp-product-supportmaterials-clients"> 5441 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5442 <div class="row"> 5443 <div class="col-12 is-loading"> 5444 <div class="e-loading-spinner"></div> 5445 </div> 5446 </div> 5447 </div> 5448 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template"> 5449 <div class="js-dvp-product-supportmaterials-clients-animate fade"> 5450 {{#if clientSupportmaterials.items}} 5451 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5452 <div class="row"> 5453 {{#if clientSupportmaterials.display}} 5454 <div class="col-12 col-md-4"> 5455 <div class="e-product-section-header"> 5456 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2> 5457 </div> 5458 </div> 5459 <div class="col-12 col-md-8 mt-half"> 5460 {{#each clientSupportmaterials.items}} 5461 5462 <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}}"> 5463 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 5464 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 5465 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 5466 </p> 5467 5468 <div class="row"> 5469 <div class="col-12"> 5470 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}"> 5471 <div class="row"> 5472 <div class="col-12 pl-md-3"> 5473 <div class="row"> 5474 {{#each materials}} 5475 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 5476 <div class="row"> 5477 <div class="col-12 col-md-6 text-center"> 5478 {{#if download}} 5479 {{#if loginToDownload}} 5480 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 5481 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5482 </a> 5483 {{else}} 5484 <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"> 5485 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5486 </a> 5487 {{/if}} 5488 {{else}} 5489 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5490 {{/if}} 5491 </div> 5492 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 5493 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 5494 {{#if download}} 5495 <p class="mb-1"> 5496 {{#if loginToDownload}} 5497 <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> 5498 {{else}} 5499 <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"> 5500 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 5501 </a> 5502 {{/if}} 5503 </p> 5504 {{/if}} 5505 5506 @if(shopIsActive && hasAccess) 5507 { 5508 @:{{#if orderable}} 5509 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 5510 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 5511 <input type="hidden" name="CartCmd" value="Add"> 5512 <input type="hidden" name="ProductID" value="{{id}}"> 5513 <input type="hidden" name="VariantID" value=""> 5514 <input type="hidden" name="UnitID" value=""> 5515 <input type="hidden" name="Redirect" value="false"> 5516 <input type="hidden" name="Quantity" value="1"> 5517 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 5518 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 5519 </form> 5520 @:{{/if}} 5521 } 5522 5523 </div> 5524 </div> 5525 </div> 5526 {{/each}} 5527 </div> 5528 </div> 5529 </div> 5530 </div> 5531 </div> 5532 </div> 5533 {{/each}} 5534 </div> 5535 {{else}} 5536 <div class="col-12 text-center"> 5537 <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> 5538 <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> 5539 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 5540 <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> 5541 </div> 5542 {{/if}} 5543 </div> 5544 </div> 5545 {{/if}} 5546 </div> 5547 </script> 5548 5549 </div> 5550 } 5551 else if(productPanelNameValue == "Videos") 5552 { 5553 <div class="col-12" id="js-dvp-product-videos"> 5554 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5555 <div class="row"> 5556 <div class="col-12 is-loading"> 5557 <div class="e-loading-spinner"></div> 5558 </div> 5559 </div> 5560 </div> 5561 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template"> 5562 <div class="js-dvp-product-videos-animate fade"> 5563 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5564 <div class="row"> 5565 {{#if display}} 5566 <div class="col-12 col-md-4"> 5567 <div class="e-product-section-header"> 5568 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2> 5569 </div> 5570 </div> 5571 <div class="col-12 col-md-8 mt-half"> 5572 {{#compare totalVideoCount '>' 4}} 5573 <div class="collapse-peek"> 5574 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos"> 5575 {{/compare}} 5576 <div class="row"> 5577 {{#each videos}} 5578 {{#each videos}} 5579 <div class="col-12 col-md-6"> 5580 <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}}}"> 5581 <div> 5582 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" /> 5583 <p class="text-center mt-1 mb-3">{{embedTitle}}</p> 5584 </div> 5585 </a> 5586 <sc{{handlebarHack}}ript type="application/json"> 5587 { 5588 "url":"{{../url}}", 5589 "header":"{{embedTitle}}", 5590 "embedUrl":"{{{embedUrl}}}" 5591 } 5592 </sc{{handlebarHack}}ript> 5593 </div> 5594 {{/each}} 5595 {{/each}} 5596 </div> 5597 {{#compare totalVideoCount '>' 4}} 5598 </div> 5599 <div class="collapse-peek-toggle"> 5600 <div class="row"> 5601 <div class="col-12 mx-auto text-center"> 5602 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos"> 5603 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span> 5604 </a> 5605 </div> 5606 </div> 5607 </div> 5608 {{/compare}} 5609 </div> 5610 </div> 5611 {{else}} 5612 <div class="col-12 text-center"> 5613 <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> 5614 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p> 5615 <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> 5616 </div> 5617 {{/if}} 5618 </div> 5619 </div> 5620 </div> 5621 </script> 5622 </div> 5623 } 5624 else if(productPanelNameValue == "Related ranges") 5625 { 5626 <div class="col-12"> 5627 @if( GetLoop("RelatedRanges").Count() > 0 ) 5628 { 5629 string relatedProductsHeader = Translate("Other related products","Other related products"); 5630 5631 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value"))) 5632 { 5633 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value"); 5634 } 5635 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5636 <div class="row"> 5637 <div class="col-12 col-md-4"> 5638 <div class="e-product-section-header"> 5639 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2> 5640 </div> 5641 </div> 5642 <div class="col-12 col-md-8 mt-half dvp-ranges-list"> 5643 <div class="row"> 5644 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges")) 5645 { 5646 string relatedRangeGroupId = ""; 5647 5648 int relatedProductInt = 0; 5649 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count(); 5650 string relatedRangeName = relatedRange.GetString("Range"); 5651 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>"); 5652 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-"); 5653 5654 <div class="col-12 col-lg-6 mb-3"> 5655 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")"> 5656 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3> 5657 </div> 5658 <div class="col-12 px-1 pt-1 border dvp-range"> 5659 <div> 5660 <div class="row"> 5661 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange")) 5662 { 5663 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId; 5664 5665 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage"); 5666 5667 if(relatedProductInt == 2) 5668 { 5669 @:</div> 5670 @:</div> 5671 @:<div class="collapse" id="range-@relatedRangeNameCleaned"> 5672 @:<div class="row"> 5673 } 5674 5675 string relatedUrl = string.Empty; 5676 5677 string relatedUrlFriendlyProduct = string.Empty; 5678 5679 string relatedProductName = product.GetString("Ecom:Product.Name"); 5680 5681 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName"); 5682 5683 string relatedProductDisplayName = relatedProductName; 5684 string relatedProductTitleName = relatedProductName; 5685 5686 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 5687 { 5688 if(hideRelatedProductName) 5689 { 5690 relatedProductDisplayName = relatedRangeNameSuperscripted; 5691 relatedProductTitleName = relatedRangeName; 5692 } 5693 else 5694 { 5695 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName; 5696 relatedProductTitleName = relatedRangeName + " " + relatedProductName; 5697 } 5698 } 5699 5700 if(product.GetBoolean("Ecom:Product:Field.IsDiets")) 5701 { 5702 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 5703 } 5704 else 5705 { 5706 relatedUrl = relatedProductName; 5707 } 5708 5709 if(relatedProductsInRangeCount > 1) 5710 { 5711 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-"); 5712 } 5713 5714 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 5715 5716 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct; 5717 5718 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center"> 5719 <a href="@relatedProductUrl" title="@relatedProductTitleName"> 5720 <div class="row"> 5721 <div class="col-12 dvp-image-container"> 5722 <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"> 5723 </div> 5724 <div class="col-12"> 5725 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p> 5726 </div> 5727 </div> 5728 </a> 5729 </div> 5730 5731 relatedProductInt++; 5732 } 5733 </div> 5734 </div> 5735 <div class="row mt-1 dvp-view-more-products"> 5736 @if(relatedProductsInRangeCount > 2) 5737 { 5738 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2; 5739 5740 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products"); 5741 5742 if(relatedProductsInRangeCount == 3 ) 5743 { 5744 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product"); 5745 } 5746 5747 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString()); 5748 5749 <div class="col-12"> 5750 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more"> 5751 <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);"> 5752 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span> 5753 <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> 5754 </a> 5755 </p> 5756 </div> 5757 } 5758 </div> 5759 </div> 5760 </div> 5761 } 5762 </div> 5763 </div> 5764 </div> 5765 </div> 5766 } 5767 </div> 5768 } 5769 else if(productPanelNameValue == "Newsletter") 5770 { 5771 <div class="col-12"> 5772 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5773 <div class="row"> 5774 <div class="col-12 col-md-4"> 5775 <div class="e-product-section-header"> 5776 <h2 class="mb-1 mb-md-0">Newsletter</h2> 5777 </div> 5778 </div> 5779 <div class="col-12 col-md-8"> 5780 <div class="dvp-newsletter-signup-form"> 5781 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide"> 5782 <div class="form-group"> 5783 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label> 5784 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter"> 5785 </div> 5786 <div class="form-group"> 5787 <button type="submit" class="btn btn-primary">Sign up</button> 5788 </div> 5789 </form> 5790 </div> 5791 </div> 5792 </div> 5793 </div> 5794 </div> 5795 } 5796 else if(productPanelNameValue == "eLearning") 5797 { 5798 <div class="col-12" id="js-dvp-product-elearning"> 5799 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5800 <div class="row"> 5801 <div class="col-12 is-loading"> 5802 <div class="e-loading-spinner"></div> 5803 </div> 5804 </div> 5805 </div> 5806 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template"> 5807 <div class="js-dvp-product-elearning-animate fade"> 5808 {{#if elearning.items}} 5809 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5810 <div class="row"> 5811 <div class="col-12 col-md-4"> 5812 <div class="e-product-section-header"> 5813 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2> 5814 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" /> 5815 </div> 5816 </div> 5817 <div class="col-12 col-md-8"> 5818 <h3> 5819 {{elearning.items.0.courseAmountText}} 5820 </h3> 5821 <div class="row"> 5822 <div class="col-12"> 5823 <div class="list-group"> 5824 {{#if elearning.display}} 5825 {{#each elearning.items.0.courses}} 5826 <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}}"> 5827 <b>{{name}}</b> 5828 </a> 5829 {{/each}} 5830 {{else}} 5831 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p> 5832 <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> 5833 {{/if}} 5834 </div> 5835 </div> 5836 </div> 5837 {{#unless elearning.display}} 5838 <div class="row mt-2"> 5839 <div class="col-12"> 5840 <div class="bg-academy"> 5841 <div class="row p-2"> 5842 @{ 5843 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString(); 5844 } 5845 <div class="col-12"> 5846 <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> 5847 </div> 5848 <div class="col-12 col-md-8 text-white"> 5849 <ul class="mb-0"> 5850 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li> 5851 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li> 5852 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li> 5853 </ul> 5854 </div> 5855 <div class="col-12 col-md-4 pt-2"> 5856 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p> 5857 </div> 5858 </div> 5859 </div> 5860 </div> 5861 </div> 5862 {{/unless}} 5863 </div> 5864 </div> 5865 </div> 5866 {{/if}} 5867 </div> 5868 </script> 5869 </div> 5870 } 5871 else if(productPanelNameValue == "Product Websites") 5872 { 5873 <div class="col-12" id="js-dvp-product-websites"> 5874 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5875 <div class="row"> 5876 <div class="col-12 is-loading"> 5877 <div class="e-loading-spinner"></div> 5878 </div> 5879 </div> 5880 </div> 5881 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template"> 5882 <div class="js-dvp-product-websites-animate fade"> 5883 {{#if websites.items}} 5884 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5885 <div class="row"> 5886 {{#if websites.display}} 5887 <div class="col-12 col-md-4"> 5888 <div class="e-product-section-header"> 5889 <h2 class="mb-1 mb-md-0"> 5890 {{#compare count '>' 1}} 5891 @Translate("Product Websites","Product Websites") 5892 {{else}} 5893 @Translate("Product Website","Product Website") 5894 {{/compare}} 5895 </h2> 5896 </div> 5897 </div> 5898 <div class="col-12 col-md-8 mt-half"> 5899 {{#each websites.items.0.website}} 5900 <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}}"> 5901 <div class="col-12 col-md-6"> 5902 <p class="lead"> 5903 {{name}} 5904 </p> 5905 <p> 5906 <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}}"> 5907 @Translate("Go to website","Go to website") 5908 </a> 5909 </p> 5910 </div> 5911 <div class="col-12 col-md-6"> 5912 <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}}"> 5913 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" /> 5914 </a> 5915 </div> 5916 </div> 5917 {{/each}} 5918 </div> 5919 {{else}} 5920 <div class="col-12 text-center"> 5921 <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> 5922 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p> 5923 <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> 5924 </div> 5925 {{/if}} 5926 </div> 5927 </div> 5928 {{/if}} 5929 </div> 5930 </script> 5931 </div> 5932 } 5933 else if(productPanelNameValue == "Previous Premium Content") 5934 { 5935 <div class="col-12" id="js-dvp-product-previous-premium-content"> 5936 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5937 <div class="row"> 5938 <div class="col-12 is-loading"> 5939 <div class="e-loading-spinner"></div> 5940 </div> 5941 </div> 5942 </div> 5943 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template"> 5944 <div class="js-dvp-product-previous-premium-content-animate fade"> 5945 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5946 <div class="row"> 5947 <div class="col-12 col-md-4"> 5948 <div class="e-product-section-header"> 5949 <h2 class="mb-1 mb-md-0"> 5950 @Translate("Previous Premium Content","Premium Content") 5951 </h2> 5952 </div> 5953 </div> 5954 <div class="col-12 col-md-8 mt-half"> 5955 {{#each premiumPages}} 5956 <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}}"> 5957 <div class="col-12 col-md-6"> 5958 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 5959 </div> 5960 <div class="col-12 col-md-6"> 5961 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 5962 <p>{{searchFriendlyDescription}}</p> 5963 <p> 5964 <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}}"> 5965 {{searchFriendlyButtonText}} 5966 </a> 5967 </p> 5968 </div> 5969 </div> 5970 {{/each}} 5971 </div> 5972 </div> 5973 </div> 5974 </div> 5975 </script> 5976 </div> 5977 } 5978 else if(productPanelNameValue == "Frequent Treatment Questions") 5979 { 5980 <div class="col-12" id="js-dvp-product-faq"> 5981 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5982 <div class="row"> 5983 <div class="col-12 is-loading"> 5984 <div class="e-loading-spinner"></div> 5985 </div> 5986 </div> 5987 </div> 5988 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template"> 5989 <div class="js-dvp-product-faq-animate fade"> 5990 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5991 <div class="row"> 5992 {{#if display}} 5993 <div class="col-12 col-md-4"> 5994 <div class="e-product-section-header"> 5995 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2> 5996 </div> 5997 </div> 5998 <div class="col-12 col-md-8 mt-half dvp-faq"> 5999 {{# faqs}} 6000 {{#each faq}} 6001 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}"> 6002 <div class="row"> 6003 <div class="col-12"> 6004 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}"> 6005 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 6006 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 6007 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small> 6008 </h3> 6009 </div> 6010 </div> 6011 <div class="row"> 6012 <div class="col-12"> 6013 <div class="collapse" id="collapse-{{paragraphId}}"> 6014 <div class="row"> 6015 <div class="col-12 pl-3"> 6016 {{#each faqList}} 6017 <div class="row"> 6018 <div class="col-12 mt-1"> 6019 <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}}"> 6020 {{listHeader}} 6021 </a> 6022 <sc{{handlebarHack}}ript type="application/json"> 6023 { 6024 "url":"{{../../url}}", 6025 "categoryName": "{{../categoryName}}", 6026 "header":"{{listHeader}}", 6027 "content":"{{{listContent}}}" 6028 } 6029 </sc{{handlebarHack}}ript> 6030 </div> 6031 </div> 6032 {{/each}} 6033 </div> 6034 </div> 6035 </div> 6036 </div> 6037 </div> 6038 </div> 6039 {{/each}} 6040 {{/faqs}} 6041 6042 {{#each accordions}} 6043 <div class="p col-12 p-accordion" id="{{paragraphID}}"> 6044 {{#if introText}} 6045 <div class="p-accordion-lead"> 6046 {{{introText}}} 6047 </div> 6048 {{/if}} 6049 <div class="p-accordion-container "> 6050 {{#each accordionItems}} 6051 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 "> 6052 <div class="p-accordion-toggle"> 6053 <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"> 6054 <span class="p-accordion-toggle-text mb-0 line-height-sm none"> 6055 {{heading}} 6056 </span> 6057 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i> 6058 </p> 6059 </div> 6060 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse"> 6061 <div class="px-2 pb-1 p-accordion-content"> 6062 <div class="p-txt-container dvp-rich-text-content pt-1"> 6063 {{{text}}} 6064 </div> 6065 </div> 6066 </div> 6067 </div> 6068 {{/each}} 6069 </div> 6070 </div> 6071 {{/each}} 6072 6073 6074 </div> 6075 {{else}} 6076 <div class="col-12 text-center"> 6077 <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> 6078 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p> 6079 <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> 6080 </div> 6081 {{/if}} 6082 </div> 6083 </div> 6084 </div> 6085 </script> 6086 </div> 6087 } 6088 else if(productPanelNameValue == "Got More Questions form") 6089 { 6090 <div class="col-12 js-dvp-product-details-more-info-section"> 6091 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6092 <div class="row"> 6093 <div class="col-12 col-md-4"> 6094 <div class="e-product-section-header"> 6095 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2> 6096 </div> 6097 </div> 6098 <div class="p col-12 col-md-8 mt-half"> 6099 @{ 6100 int currentPageId; 6101 6102 int.TryParse(pageId, out currentPageId); 6103 6104 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph; 6105 6106 int currentParagraphId = currentParagraph.GlobalRecordParagraphID; 6107 6108 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString(); 6109 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString(); 6110 6111 int formPageId; 6112 int formParagraphId; 6113 6114 int.TryParse(formPageIdString, out formPageId); 6115 int.TryParse(formParagraphIdString, out formParagraphId); 6116 6117 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId); 6118 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId); 6119 6120 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView); 6121 6122 } 6123 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString) 6124 </div> 6125 </div> 6126 </div> 6127 </div> 6128 } 6129 } 6130 </div> 6131 } 6132 6133 } 6134 else if(productType.GetBoolean("Ecom:Product:Field.IsPharma")) 6135 { 6136 string rangeName = range.GetString("Range"); 6137 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>"); 6138 string rangeId = string.Empty; 6139 string therapyAreaId = string.Empty; 6140 string therapyAreaName = string.Empty; 6141 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 6142 string optionalName = string.Empty; 6143 string displayName = string.Empty; 6144 string displayNameSuperscripted = string.Empty; 6145 string groupId = string.Empty; 6146 string productName = string.Empty; 6147 string productDisplayName = string.Empty; 6148 string urlFriendlyProductName = string.Empty; 6149 string productShortDescription = string.Empty; 6150 string productShortDescriptionJSON = string.Empty; 6151 string productActives = string.Empty; 6152 string productActivesJSON = string.Empty; 6153 string productPackSize = string.Empty; 6154 string productWithdrawalPeriod = string.Empty; 6155 string productDatasheet = string.Empty; 6156 string productPackInsert = string.Empty; 6157 string productSPC = string.Empty; 6158 string productMSDS = string.Empty; 6159 bool hasDocuments = true; 6160 string productDisclaimer = string.Empty; 6161 string productDisclaimerJSON = string.Empty; 6162 string productImage = string.Empty; 6163 string productUrl = string.Empty; 6164 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts"); 6165 6166 if(productsInRangeCount > 1) 6167 { 6168 <div class="row"> 6169 <div class="col-12 col-md-6 mb-md-3 pr-sm-3"> 6170 <h1 class="mb-1 font-weight-bold"> 6171 @rangeNameSuperscripted 6172 </h1> 6173 @foreach(LoopItem product in range.GetLoop("ProductsInRange")) 6174 { 6175 6176 groupId = product.GetString("Ecom:Group.ID"); 6177 6178 productName = product.GetString("Ecom:Product.Name"); 6179 productDisplayName = productName; 6180 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-"); 6181 6182 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 6183 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 6184 6185 optionalName = product.GetString("Ecom:Product:Field.OptionalName"); 6186 6187 if(!string.IsNullOrEmpty(optionalName)) 6188 { 6189 displayName = optionalName; 6190 displayNameSuperscripted = optionalName.Replace("®","<sup>®</sup>"); 6191 } 6192 else 6193 { 6194 displayName = rangeName; 6195 displayNameSuperscripted = rangeNameSuperscripted; 6196 } 6197 6198 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 6199 { 6200 productDisplayName = displayNameSuperscripted + " " + productName; 6201 } 6202 6203 rangeId = "0"; 6204 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value"))) 6205 { 6206 rangeId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value"); 6207 } 6208 6209 therapyAreaId = "0"; 6210 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value"))) 6211 { 6212 therapyAreaId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value"); 6213 } 6214 6215 therapyAreaName = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.OptionLabel"); 6216 6217 productActives = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.ingredients.Value"); 6218 productActivesJSON = WebUtility.HtmlDecode(Regex.Replace(productActives, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 6219 6220 productPackSize = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packetsize.OptionLabel").Replace(",",", "); 6221 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.withdrawalperiod.Value"); 6222 6223 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.datasheet.Value"); 6224 productPackInsert = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packinsert.Value"); 6225 productSPC = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.spc.Value"); 6226 productMSDS = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.msds.Value"); 6227 6228 hasDocuments = true; 6229 6230 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 6231 { 6232 hasDocuments = false; 6233 } 6234 6235 productDisclaimer = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.disclaimer.Value"); 6236 productDisclaimerJSON = WebUtility.HtmlDecode(Regex.Replace(productDisclaimer, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 6237 6238 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 6239 productUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + groupId + "#" + urlFriendlyProductName; 6240 6241 <a class="js-dvp-product-list-details" href="@productUrl" title="@displayName - @productName" data-productname="@urlFriendlyProductName"> 6242 <div class="row px-sm-1 my-2 my-sm-0"> 6243 <div class="dvp-product-list-details col-12 p-sm-1 py-1"> 6244 <div class="row"> 6245 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container"> 6246 <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"> 6247 </div> 6248 <div class="col-9 col-sm-8 px-sm-2 my-auto"> 6249 <p class="mb-0"> 6250 @if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 6251 { 6252 <b>@productDisplayName</b> 6253 } 6254 else 6255 { 6256 <b class="h3">@displayNameSuperscripted</b> 6257 <br> @productDisplayName 6258 } 6259 </p> 6260 </div> 6261 <div class="col-2 d-none d-sm-block my-auto text-center"> 6262 <i class="material-icons material-icons-4x">keyboard_arrow_right</i> 6263 </div> 6264 </div> 6265 <script type="application/json" class="@urlFriendlyProductName"> 6266 { 6267 "Name":"@productDisplayName", 6268 "ShortDescription":"@productShortDescriptionJSON", 6269 "Image":"@productImage", 6270 "Actives":"@productActivesJSON", 6271 "PackSize":"@productPackSize", 6272 "WithdrawalPeriod":"@productWithdrawalPeriod", 6273 "Datasheet":"@productDatasheet", 6274 "PackInsert":"@productPackInsert", 6275 "SPC":"@productSPC", 6276 "MSDS":"@productMSDS", 6277 "HasDocuments":"@hasDocuments", 6278 "Disclaimer":"@productDisclaimerJSON" 6279 } 6280 </script> 6281 </div> 6282 </div> 6283 </a> 6284 } 6285 </div> 6286 <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"> 6287 <div class="js-dvp-product-details-animate fade"> 6288 <div class="row"> 6289 <div class="col-12"> 6290 <div class="e-product-image-container dvp-product-details-image-container text-center"> 6291 <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"> 6292 </div> 6293 </div> 6294 </div> 6295 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 6296 { 6297 <div class="row"> 6298 <div class="col-12"> 6299 @productShortDescriptionJSON 6300 </div> 6301 </div> 6302 } 6303 <div class="row"> 6304 <div class="col-12 mt-2 table-responsive"> 6305 <table class="table"> 6306 @if(!string.IsNullOrEmpty(productActives)) 6307 { 6308 <tr> 6309 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 6310 <td>@productActives</td> 6311 </tr> 6312 } 6313 @if(!string.IsNullOrEmpty(productPackSize)) 6314 { 6315 <tr> 6316 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 6317 <td>@productPackSize</td> 6318 </tr> 6319 } 6320 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 6321 { 6322 <tr> 6323 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 6324 <td>@productWithdrawalPeriod</td> 6325 </tr> 6326 } 6327 @if(hasDocuments) 6328 { 6329 <tr> 6330 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 6331 <td> 6332 @if(!string.IsNullOrEmpty(productDatasheet)) 6333 { 6334 <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> 6335 } 6336 @if(!string.IsNullOrEmpty(productPackInsert)) 6337 { 6338 <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> 6339 } 6340 @if(!string.IsNullOrEmpty(productSPC)) 6341 { 6342 <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> 6343 } 6344 @if(!string.IsNullOrEmpty(productMSDS)) 6345 { 6346 <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> 6347 } 6348 </td> 6349 </tr> 6350 } 6351 </table> 6352 </div> 6353 </div> 6354 @if(!string.IsNullOrEmpty(productDisclaimer)) 6355 { 6356 <div class="row"> 6357 <div class="col-12"> 6358 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 6359 <small> 6360 @productDisclaimer 6361 </small> 6362 </div> 6363 </div> 6364 } 6365 @if(!hideRequestmoreinformation) 6366 { 6367 <div class="row"> 6368 <div class="col-12"> 6369 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button> 6370 </div> 6371 </div> 6372 } 6373 </div> 6374 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template"> 6375 <div class="js-dvp-product-details-animate fade"> 6376 6377 <div class="e-product-image-container dvp-product-details-image-container text-center"> 6378 <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}}"> 6379 </div> 6380 {{#if ShortDescription}} 6381 <div class="dvp-short-description"> 6382 {{{ShortDescription}}} 6383 </div> 6384 {{/if}} 6385 <div class="row"> 6386 <div class="col-12 mt-2 table-responsive"> 6387 <table class="table"> 6388 {{#if Actives}} 6389 <tr> 6390 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 6391 <td>{{{Actives}}}</td> 6392 </tr> 6393 {{/if}} 6394 {{#if PackSize}} 6395 <tr> 6396 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 6397 <td>{{PackSize}}</td> 6398 </tr> 6399 {{/if}} 6400 {{#if WithdrawalPeriod}} 6401 <tr> 6402 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 6403 <td>{{{WithdrawalPeriod}}}</td> 6404 </tr> 6405 {{/if}} 6406 {{#compare HasDocuments '===' 'True'}} 6407 <tr> 6408 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 6409 <td> 6410 {{#if Datasheet}} 6411 <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> 6412 {{/if}} 6413 {{#if PackInsert}} 6414 <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> 6415 {{/if}} 6416 {{#if SPC}} 6417 <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> 6418 {{/if}} 6419 {{#if MSDS}} 6420 <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> 6421 {{/if}} 6422 </td> 6423 </tr> 6424 {{/compare}} 6425 </table> 6426 </div> 6427 </div> 6428 {{#if Disclaimer}} 6429 <div class="row mt-1"> 6430 <div class="col-12"> 6431 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 6432 <small> 6433 {{{Disclaimer}}} 6434 </small> 6435 </div> 6436 </div> 6437 {{/if}} 6438 @if(!hideRequestmoreinformation) 6439 { 6440 <div class="row"> 6441 <div class="col-12"> 6442 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button> 6443 </div> 6444 </div> 6445 } 6446 </div> 6447 </script> 6448 </div> 6449 </div> 6450 } 6451 else 6452 { 6453 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 6454 { 6455 6456 groupId = product.GetString("Ecom:Group.ID"); 6457 6458 productName = product.GetString("Ecom:Product.Name"); 6459 6460 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 6461 6462 optionalName = product.GetString("Ecom:Product:Field.OptionalName"); 6463 6464 if(!string.IsNullOrEmpty(optionalName)) 6465 { 6466 displayName = optionalName; 6467 displayNameSuperscripted = optionalName.Replace("®","<sup>®</sup>"); 6468 } 6469 6470 rangeId = "0"; 6471 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value"))) 6472 { 6473 rangeId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value"); 6474 } 6475 6476 therapyAreaId = "0"; 6477 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value"))) 6478 { 6479 therapyAreaId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value"); 6480 } 6481 6482 therapyAreaName = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.OptionLabel"); 6483 6484 productActives = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.ingredients.Value"); 6485 productPackSize = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packetsize.OptionLabel").Replace(",",", ");; 6486 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.withdrawalperiod.Value"); 6487 6488 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.datasheet.Value"); 6489 productPackInsert = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packinsert.Value"); 6490 productSPC = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.spc.Value"); 6491 productMSDS = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.msds.Value"); 6492 6493 hasDocuments = true; 6494 6495 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 6496 { 6497 hasDocuments = false; 6498 } 6499 6500 productDisclaimer = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.disclaimer.Value"); 6501 6502 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 6503 } 6504 <div class="row dvp-product-details"> 6505 <div class="col-12"> 6506 <div class="row"> 6507 <div class="col-12"> 6508 <h1 class="mb-1 font-weight-bold"> 6509 @rangeNameSuperscripted 6510 </h1> 6511 </div> 6512 </div> 6513 </div> 6514 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4"> 6515 <div class="row"> 6516 <div class="col-12"> 6517 <div class="e-product-image-container dvp-product-details-image-container text-center"> 6518 <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"> 6519 </div> 6520 </div> 6521 </div> 6522 </div> 6523 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-4 pb-4 mt-sm-0 pl-sm-3"> 6524 @if(!string.IsNullOrEmpty(optionalName)) 6525 { 6526 <div class="row"> 6527 <div class="col-12"> 6528 <h2 class="mb-0">@displayNameSuperscripted</h2> 6529 </div> 6530 </div> 6531 } 6532 @if(!string.IsNullOrEmpty(productShortDescription)) 6533 { 6534 <div class="row"> 6535 <div class="col-12"> 6536 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")) 6537 </div> 6538 </div> 6539 } 6540 <div class="row"> 6541 <div class="col-12 mt-2 table-responsive"> 6542 <table class="table"> 6543 @if(!string.IsNullOrEmpty(productActives)) 6544 { 6545 <tr> 6546 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 6547 <td>@productActives</td> 6548 </tr> 6549 } 6550 @if(!string.IsNullOrEmpty(productPackSize)) 6551 { 6552 <tr> 6553 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 6554 <td>@productPackSize</td> 6555 </tr> 6556 } 6557 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 6558 { 6559 <tr> 6560 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 6561 <td>@productWithdrawalPeriod</td> 6562 </tr> 6563 } 6564 @if(hasDocuments) 6565 { 6566 <tr> 6567 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 6568 <td> 6569 @if(!string.IsNullOrEmpty(productDatasheet)) 6570 { 6571 <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> 6572 } 6573 @if(!string.IsNullOrEmpty(productPackInsert)) 6574 { 6575 <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> 6576 } 6577 @if(!string.IsNullOrEmpty(productSPC)) 6578 { 6579 <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> 6580 } 6581 @if(!string.IsNullOrEmpty(productMSDS)) 6582 { 6583 <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> 6584 } 6585 </td> 6586 </tr> 6587 } 6588 </table> 6589 </div> 6590 </div> 6591 @if(!string.IsNullOrEmpty(productDisclaimer)) 6592 { 6593 <div class="row mt-1"> 6594 <div class="col-12"> 6595 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 6596 <small> 6597 @productDisclaimer 6598 </small> 6599 </div> 6600 </div> 6601 } 6602 @if(!hideRequestmoreinformation) 6603 { 6604 <div class="row"> 6605 <div class="col-12"> 6606 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button> 6607 </div> 6608 </div> 6609 } 6610 </div> 6611 </div> 6612 } 6613 6614 int productPanelsItemId = 0; 6615 6616 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId)) 6617 { 6618 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId); 6619 6620 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId"> 6621 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations) 6622 { 6623 string productPanelNameValue = productPanel.GetValue<string>("Name"); 6624 6625 if(productPanelNameValue == "Supportmaterials for vets") 6626 { 6627 <div class="col-12" id="js-dvp-product-supportmaterials-vets"> 6628 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6629 <div class="row"> 6630 <div class="col-12 is-loading"> 6631 <div class="e-loading-spinner"></div> 6632 </div> 6633 </div> 6634 </div> 6635 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template"> 6636 <div class="js-dvp-product-supportmaterials-vets-animate fade"> 6637 {{#if vetSupportmaterials.items}} 6638 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6639 <div class="row"> 6640 {{#if vetSupportmaterials.display}} 6641 <div class="col-12 col-md-4"> 6642 <div class="e-product-section-header"> 6643 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2> 6644 </div> 6645 </div> 6646 <div class="col-12 col-md-8 mt-half"> 6647 {{#each vetSupportmaterials.items}} 6648 6649 <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}}"> 6650 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 6651 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 6652 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 6653 </p> 6654 6655 <div class="row"> 6656 <div class="col-12"> 6657 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}"> 6658 <div class="row"> 6659 <div class="col-12 pl-md-3"> 6660 <div class="row"> 6661 {{#each materials}} 6662 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 6663 <div class="row"> 6664 <div class="col-12 col-md-6 text-center"> 6665 {{#if download}} 6666 {{#if loginToDownload}} 6667 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 6668 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6669 </a> 6670 {{else}} 6671 <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"> 6672 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6673 </a> 6674 {{/if}} 6675 {{else}} 6676 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6677 {{/if}} 6678 </div> 6679 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 6680 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 6681 6682 {{#if loginToDownload}} 6683 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 6684 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download") 6685 </a> 6686 {{else}} 6687 <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"> 6688 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 6689 </a> 6690 {{/if}} 6691 6692 @if(shopIsActive && hasAccess) 6693 { 6694 @:{{#if orderable}} 6695 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 6696 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 6697 <input type="hidden" name="CartCmd" value="Add"> 6698 <input type="hidden" name="ProductID" value="{{id}}"> 6699 <input type="hidden" name="VariantID" value=""> 6700 <input type="hidden" name="UnitID" value=""> 6701 <input type="hidden" name="Redirect" value="false"> 6702 <input type="hidden" name="Quantity" value="1"> 6703 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 6704 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 6705 </form> 6706 @:{{/if}} 6707 } 6708 </div> 6709 </div> 6710 </div> 6711 {{/each}} 6712 </div> 6713 </div> 6714 </div> 6715 </div> 6716 </div> 6717 </div> 6718 {{/each}} 6719 </div> 6720 {{else}} 6721 <div class="col-12 text-center"> 6722 <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> 6723 <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> 6724 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 6725 <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> 6726 </div> 6727 {{/if}} 6728 </div> 6729 </div> 6730 {{/if}} 6731 </div> 6732 </script> 6733 6734 </div> 6735 } 6736 else if(productPanelNameValue == "Supportmaterials for pet owners") 6737 { 6738 <div class="col-12" id="js-dvp-product-supportmaterials-clients"> 6739 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6740 <div class="row"> 6741 <div class="col-12 is-loading"> 6742 <div class="e-loading-spinner"></div> 6743 </div> 6744 </div> 6745 </div> 6746 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template"> 6747 <div class="js-dvp-product-supportmaterials-clients-animate fade"> 6748 {{#if clientSupportmaterials.items}} 6749 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6750 <div class="row"> 6751 {{#if clientSupportmaterials.display}} 6752 <div class="col-12 col-md-4"> 6753 <div class="e-product-section-header"> 6754 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2> 6755 </div> 6756 </div> 6757 <div class="col-12 col-md-8 mt-half"> 6758 {{#each clientSupportmaterials.items}} 6759 6760 <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}}"> 6761 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 6762 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 6763 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 6764 </p> 6765 6766 <div class="row"> 6767 <div class="col-12"> 6768 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}"> 6769 <div class="row"> 6770 <div class="col-12 pl-md-3"> 6771 <div class="row"> 6772 {{#each materials}} 6773 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 6774 <div class="row"> 6775 <div class="col-12 col-md-6 text-center"> 6776 {{#if download}} 6777 {{#if loginToDownload}} 6778 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 6779 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6780 </a> 6781 {{else}} 6782 <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"> 6783 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6784 </a> 6785 {{/if}} 6786 {{else}} 6787 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6788 {{/if}} 6789 </div> 6790 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 6791 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 6792 {{#if download}} 6793 <p class="mb-1"> 6794 {{#if loginToDownload}} 6795 <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> 6796 {{else}} 6797 <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"> 6798 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 6799 </a> 6800 {{/if}} 6801 </p> 6802 {{/if}} 6803 6804 @if(shopIsActive && hasAccess) 6805 { 6806 @:{{#if orderable}} 6807 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 6808 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 6809 <input type="hidden" name="CartCmd" value="Add"> 6810 <input type="hidden" name="ProductID" value="{{id}}"> 6811 <input type="hidden" name="VariantID" value=""> 6812 <input type="hidden" name="UnitID" value=""> 6813 <input type="hidden" name="Redirect" value="false"> 6814 <input type="hidden" name="Quantity" value="1"> 6815 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 6816 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 6817 </form> 6818 @:{{/if}} 6819 } 6820 6821 </div> 6822 </div> 6823 </div> 6824 {{/each}} 6825 </div> 6826 </div> 6827 </div> 6828 </div> 6829 </div> 6830 </div> 6831 {{/each}} 6832 </div> 6833 {{else}} 6834 <div class="col-12 text-center"> 6835 <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> 6836 <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> 6837 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 6838 <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> 6839 </div> 6840 {{/if}} 6841 </div> 6842 </div> 6843 {{/if}} 6844 </div> 6845 </script> 6846 6847 </div> 6848 } 6849 else if(productPanelNameValue == "Videos") 6850 { 6851 <div class="col-12" id="js-dvp-product-videos"> 6852 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6853 <div class="row"> 6854 <div class="col-12 is-loading"> 6855 <div class="e-loading-spinner"></div> 6856 </div> 6857 </div> 6858 </div> 6859 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template"> 6860 <div class="js-dvp-product-videos-animate fade"> 6861 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6862 <div class="row"> 6863 {{#if display}} 6864 <div class="col-12 col-md-4"> 6865 <div class="e-product-section-header"> 6866 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2> 6867 </div> 6868 </div> 6869 <div class="col-12 col-md-8 mt-half"> 6870 {{#compare totalVideoCount '>' 4}} 6871 <div class="collapse-peek"> 6872 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos"> 6873 {{/compare}} 6874 <div class="row"> 6875 {{#each videos}} 6876 {{#each videos}} 6877 <div class="col-12 col-md-6"> 6878 <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}}}"> 6879 <div> 6880 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" /> 6881 <p class="text-center mt-1 mb-3">{{embedTitle}}</p> 6882 </div> 6883 </a> 6884 <sc{{handlebarHack}}ript type="application/json"> 6885 { 6886 "url":"{{../url}}", 6887 "header":"{{embedTitle}}", 6888 "embedUrl":"{{{embedUrl}}}" 6889 } 6890 </sc{{handlebarHack}}ript> 6891 </div> 6892 {{/each}} 6893 {{/each}} 6894 </div> 6895 {{#compare totalVideoCount '>' 4}} 6896 </div> 6897 <div class="collapse-peek-toggle"> 6898 <div class="row"> 6899 <div class="col-12 mx-auto text-center"> 6900 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos"> 6901 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span> 6902 </a> 6903 </div> 6904 </div> 6905 </div> 6906 {{/compare}} 6907 </div> 6908 </div> 6909 {{else}} 6910 <div class="col-12 text-center"> 6911 <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> 6912 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p> 6913 <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> 6914 </div> 6915 {{/if}} 6916 </div> 6917 </div> 6918 </div> 6919 </script> 6920 </div> 6921 } 6922 else if(productPanelNameValue == "Related ranges") 6923 { 6924 <div class="col-12"> 6925 @if( GetLoop("RelatedRanges").Count() > 0 ) 6926 { 6927 string relatedProductsHeader = Translate("Other related products","Other related products"); 6928 6929 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value"))) 6930 { 6931 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value"); 6932 } 6933 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6934 <div class="row"> 6935 <div class="col-12 col-md-4"> 6936 <div class="e-product-section-header"> 6937 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2> 6938 </div> 6939 </div> 6940 <div class="col-12 col-md-8 mt-half dvp-ranges-list"> 6941 <div class="row"> 6942 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges")) 6943 { 6944 string relatedRangeGroupId = ""; 6945 6946 int relatedProductInt = 0; 6947 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count(); 6948 string relatedRangeName = relatedRange.GetString("Range"); 6949 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>"); 6950 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-"); 6951 6952 <div class="col-12 col-lg-6 mb-3"> 6953 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")"> 6954 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3> 6955 </div> 6956 <div class="col-12 px-1 pt-1 border dvp-range"> 6957 <div> 6958 <div class="row"> 6959 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange")) 6960 { 6961 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId; 6962 6963 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage"); 6964 6965 if(relatedProductInt == 2) 6966 { 6967 @:</div> 6968 @:</div> 6969 @:<div class="collapse" id="range-@relatedRangeNameCleaned"> 6970 @:<div class="row"> 6971 } 6972 6973 string relatedUrl = string.Empty; 6974 6975 string relatedUrlFriendlyProduct = string.Empty; 6976 6977 string relatedProductName = product.GetString("Ecom:Product.Name"); 6978 6979 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName"); 6980 6981 string relatedProductDisplayName = relatedProductName; 6982 string relatedProductTitleName = relatedProductName; 6983 6984 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 6985 { 6986 if(hideRelatedProductName) 6987 { 6988 relatedProductDisplayName = relatedRangeNameSuperscripted; 6989 relatedProductTitleName = relatedRangeName; 6990 } 6991 else 6992 { 6993 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName; 6994 relatedProductTitleName = relatedRangeName + " " + relatedProductName; 6995 } 6996 } 6997 6998 if(product.GetBoolean("Ecom:Product:Field.IsDiets")) 6999 { 7000 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 7001 } 7002 else 7003 { 7004 relatedUrl = relatedProductName; 7005 } 7006 7007 if(relatedProductsInRangeCount > 1) 7008 { 7009 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-"); 7010 } 7011 7012 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 7013 7014 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct; 7015 7016 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center"> 7017 <a href="@relatedProductUrl" title="@relatedProductTitleName"> 7018 <div class="row"> 7019 <div class="col-12 dvp-image-container"> 7020 <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"> 7021 </div> 7022 <div class="col-12"> 7023 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p> 7024 </div> 7025 </div> 7026 </a> 7027 </div> 7028 7029 relatedProductInt++; 7030 } 7031 </div> 7032 </div> 7033 <div class="row mt-1 dvp-view-more-products"> 7034 @if(relatedProductsInRangeCount > 2) 7035 { 7036 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2; 7037 7038 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products"); 7039 7040 if(relatedProductsInRangeCount == 3 ) 7041 { 7042 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product"); 7043 } 7044 7045 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString()); 7046 7047 <div class="col-12"> 7048 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more"> 7049 <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);"> 7050 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span> 7051 <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> 7052 </a> 7053 </p> 7054 </div> 7055 } 7056 </div> 7057 </div> 7058 </div> 7059 } 7060 </div> 7061 </div> 7062 </div> 7063 </div> 7064 } 7065 </div> 7066 } 7067 else if(productPanelNameValue == "Newsletter") 7068 { 7069 <div class="col-12"> 7070 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7071 <div class="row"> 7072 <div class="col-12 col-md-4"> 7073 <div class="e-product-section-header"> 7074 <h2 class="mb-1 mb-md-0">Newsletter</h2> 7075 </div> 7076 </div> 7077 <div class="col-12 col-md-8"> 7078 <div class="dvp-newsletter-signup-form"> 7079 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide"> 7080 <div class="form-group"> 7081 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label> 7082 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter"> 7083 </div> 7084 <div class="form-group"> 7085 <button type="submit" class="btn btn-primary">Sign up</button> 7086 </div> 7087 </form> 7088 </div> 7089 </div> 7090 </div> 7091 </div> 7092 </div> 7093 } 7094 else if(productPanelNameValue == "eLearning") 7095 { 7096 <div class="col-12" id="js-dvp-product-elearning"> 7097 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7098 <div class="row"> 7099 <div class="col-12 is-loading"> 7100 <div class="e-loading-spinner"></div> 7101 </div> 7102 </div> 7103 </div> 7104 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template"> 7105 <div class="js-dvp-product-elearning-animate fade"> 7106 {{#if elearning.items}} 7107 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7108 <div class="row"> 7109 <div class="col-12 col-md-4"> 7110 <div class="e-product-section-header"> 7111 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2> 7112 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" /> 7113 </div> 7114 </div> 7115 <div class="col-12 col-md-8"> 7116 <h3> 7117 {{elearning.items.0.courseAmountText}} 7118 </h3> 7119 <div class="row"> 7120 <div class="col-12"> 7121 <div class="list-group"> 7122 {{#if elearning.display}} 7123 {{#each elearning.items.0.courses}} 7124 <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}}"> 7125 <b>{{name}}</b> 7126 </a> 7127 {{/each}} 7128 {{else}} 7129 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p> 7130 <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> 7131 {{/if}} 7132 </div> 7133 </div> 7134 </div> 7135 {{#unless elearning.display}} 7136 <div class="row mt-2"> 7137 <div class="col-12"> 7138 <div class="bg-academy"> 7139 <div class="row p-2"> 7140 @{ 7141 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString(); 7142 } 7143 <div class="col-12"> 7144 <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> 7145 </div> 7146 <div class="col-12 col-md-8 text-white"> 7147 <ul class="mb-0"> 7148 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li> 7149 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li> 7150 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li> 7151 </ul> 7152 </div> 7153 <div class="col-12 col-md-4 pt-2"> 7154 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p> 7155 </div> 7156 </div> 7157 </div> 7158 </div> 7159 </div> 7160 {{/unless}} 7161 </div> 7162 </div> 7163 </div> 7164 {{/if}} 7165 </div> 7166 </script> 7167 </div> 7168 } 7169 else if(productPanelNameValue == "Product Websites") 7170 { 7171 <div class="col-12" id="js-dvp-product-websites"> 7172 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7173 <div class="row"> 7174 <div class="col-12 is-loading"> 7175 <div class="e-loading-spinner"></div> 7176 </div> 7177 </div> 7178 </div> 7179 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template"> 7180 <div class="js-dvp-product-websites-animate fade"> 7181 {{#if websites.items}} 7182 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7183 <div class="row"> 7184 {{#if websites.display}} 7185 <div class="col-12 col-md-4"> 7186 <div class="e-product-section-header"> 7187 <h2 class="mb-1 mb-md-0"> 7188 {{#compare count '>' 1}} 7189 @Translate("Product Websites","Product Websites") 7190 {{else}} 7191 @Translate("Product Website","Product Website") 7192 {{/compare}} 7193 </h2> 7194 </div> 7195 </div> 7196 <div class="col-12 col-md-8 mt-half"> 7197 {{#each websites.items.0.website}} 7198 <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}}"> 7199 <div class="col-12 col-md-6"> 7200 <p class="lead"> 7201 {{name}} 7202 </p> 7203 <p> 7204 <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}}"> 7205 @Translate("Go to website","Go to website") 7206 </a> 7207 </p> 7208 </div> 7209 <div class="col-12 col-md-6"> 7210 <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}}"> 7211 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" /> 7212 </a> 7213 </div> 7214 </div> 7215 {{/each}} 7216 </div> 7217 {{else}} 7218 <div class="col-12 text-center"> 7219 <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> 7220 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p> 7221 <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> 7222 </div> 7223 {{/if}} 7224 </div> 7225 </div> 7226 {{/if}} 7227 </div> 7228 </script> 7229 </div> 7230 } 7231 else if(productPanelNameValue == "Frequent Treatment Questions") 7232 { 7233 <div class="col-12" id="js-dvp-product-faq"> 7234 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7235 <div class="row"> 7236 <div class="col-12 is-loading"> 7237 <div class="e-loading-spinner"></div> 7238 </div> 7239 </div> 7240 </div> 7241 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template"> 7242 <div class="js-dvp-product-faq-animate fade"> 7243 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7244 <div class="row"> 7245 {{#if display}} 7246 <div class="col-12 col-md-4"> 7247 <div class="e-product-section-header"> 7248 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2> 7249 </div> 7250 </div> 7251 <div class="col-12 col-md-8 mt-half dvp-faq"> 7252 {{# faqs}} 7253 {{#each faq}} 7254 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}"> 7255 <div class="row"> 7256 <div class="col-12"> 7257 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}"> 7258 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 7259 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 7260 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small> 7261 </h3> 7262 </div> 7263 </div> 7264 <div class="row"> 7265 <div class="col-12"> 7266 <div class="collapse" id="collapse-{{paragraphId}}"> 7267 <div class="row"> 7268 <div class="col-12 pl-3"> 7269 {{#each faqList}} 7270 <div class="row"> 7271 <div class="col-12 mt-1"> 7272 <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}}"> 7273 {{listHeader}} 7274 </a> 7275 <sc{{handlebarHack}}ript type="application/json"> 7276 { 7277 "url":"{{../../url}}", 7278 "categoryName": "{{../categoryName}}", 7279 "header":"{{listHeader}}", 7280 "content":"{{{listContent}}}" 7281 } 7282 </sc{{handlebarHack}}ript> 7283 </div> 7284 </div> 7285 {{/each}} 7286 </div> 7287 </div> 7288 </div> 7289 </div> 7290 </div> 7291 </div> 7292 {{/each}} 7293 {{/faqs}} 7294 7295 {{#each accordions}} 7296 <div class="p col-12 p-accordion" id="{{paragraphID}}"> 7297 {{#if introText}} 7298 <div class="p-accordion-lead"> 7299 {{{introText}}} 7300 </div> 7301 {{/if}} 7302 <div class="p-accordion-container "> 7303 {{#each accordionItems}} 7304 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 "> 7305 <div class="p-accordion-toggle"> 7306 <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"> 7307 <span class="p-accordion-toggle-text mb-0 line-height-sm none"> 7308 {{heading}} 7309 </span> 7310 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i> 7311 </p> 7312 </div> 7313 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse"> 7314 <div class="px-2 pb-1 p-accordion-content"> 7315 <div class="p-txt-container dvp-rich-text-content pt-1"> 7316 {{{text}}} 7317 </div> 7318 </div> 7319 </div> 7320 </div> 7321 {{/each}} 7322 </div> 7323 </div> 7324 {{/each}} 7325 7326 7327 </div> 7328 {{else}} 7329 <div class="col-12 text-center"> 7330 <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> 7331 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p> 7332 <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> 7333 </div> 7334 {{/if}} 7335 </div> 7336 </div> 7337 </div> 7338 </script> 7339 </div> 7340 } 7341 else if(productPanelNameValue == "Got More Questions form") 7342 { 7343 <div class="col-12 js-dvp-product-details-more-info-section"> 7344 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 7345 <div class="row"> 7346 <div class="col-12 col-md-4"> 7347 <div class="e-product-section-header"> 7348 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2> 7349 </div> 7350 </div> 7351 <div class="p col-12 col-md-8 mt-half"> 7352 @{ 7353 int currentPageId; 7354 7355 int.TryParse(pageId, out currentPageId); 7356 7357 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph; 7358 7359 int currentParagraphId = currentParagraph.GlobalRecordParagraphID; 7360 7361 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString(); 7362 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString(); 7363 7364 int formPageId; 7365 int formParagraphId; 7366 7367 int.TryParse(formPageIdString, out formPageId); 7368 int.TryParse(formParagraphIdString, out formParagraphId); 7369 7370 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId); 7371 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId); 7372 7373 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView); 7374 7375 } 7376 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString) 7377 </div> 7378 </div> 7379 </div> 7380 </div> 7381 } 7382 } 7383 </div> 7384 } 7385 } 7386 else if(productType.GetBoolean("Ecom:Product:Field.IsDiets")) 7387 { 7388 string rangeName = range.GetString("Range"); 7389 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 7390 string groupId = string.Empty; 7391 string productName = string.Empty; 7392 string publicProductCode = string.Empty; 7393 string urlFriendlyProductName = string.Empty; 7394 string productShortDescription = string.Empty; 7395 string productShortDescriptionJSON = string.Empty; 7396 string productIngredients = string.Empty; 7397 string productIngredientsJSON = string.Empty; 7398 string productPackSize = string.Empty; 7399 string productDatasheet = string.Empty; 7400 string productImage = string.Empty; 7401 string productUrl = string.Empty; 7402 7403 if(productsInRangeCount > 1) 7404 { 7405 <div class="col-12 col-sm-6 pr-sm-3"> 7406 <h1 class="mb-1 font-weight-bold"> 7407 @rangeName 7408 </h1> 7409 @foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 7410 { 7411 7412 groupId = product.GetString("Ecom:Group.ID"); 7413 7414 productName = product.GetString("Ecom:Product.Name"); 7415 7416 publicProductCode = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 7417 7418 urlFriendlyProductName = Regex.Replace(publicProductCode, @"[^A-Za-z0-9_\~]+", "-"); 7419 7420 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 7421 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 7422 7423 productIngredients = product.GetString("Ecom:Product.CategoryField.dechradiets.ingredients.Value"); 7424 productIngredientsJSON = Regex.Replace(productIngredients, @"\t|\n|\r", " "); 7425 7426 productPackSize = product.GetString("Ecom:Product.CategoryField.dechradiets.packetsize.Value"); 7427 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechradiets.datasheet.Value"); 7428 7429 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 7430 productUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + groupId + "#" + urlFriendlyProductName; 7431 7432 <a class="js-dvp-product-list-details" href="@productUrl" title="@rangeName - @productName" data-productname="@urlFriendlyProductName"> 7433 <div class="row px-sm-1"> 7434 <div class="dvp-product-list-details col-12 p-sm-1"> 7435 <div class="row"> 7436 <div class="col-3 col-sm-2 my-auto text-center"> 7437 <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"> 7438 </div> 7439 <div class="col-9 col-sm-8 px-sm-2 my-auto"> 7440 <p class="mb-0"><b class="h3">@rangeName</b><br> @productName</p> 7441 </div> 7442 <div class="col-2 d-none d-sm-block my-auto text-center"> 7443 <i class="material-icons material-icons-5x">keyboard_arrow_right</i> 7444 </div> 7445 </div> 7446 <script type="application/json" class="@urlFriendlyProductName"> 7447 { 7448 "Name":"@productName", 7449 "ShortDescription":"@productShortDescriptionJSON", 7450 "Image":"@productImage", 7451 "Ingredients":"@productIngredientsJSON", 7452 "PackSize":"@productPackSize", 7453 "Datasheet":"@productDatasheet" 7454 } 7455 </script> 7456 </div> 7457 </div> 7458 </a> 7459 } 7460 </div> 7461 <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"> 7462 <div class="js-dvp-product-details-animate fade"> 7463 <div class="row"> 7464 <div class="col-12"> 7465 <div class="e-product-image-container"> 7466 <div class="e-product-image-wrapper text-center"> 7467 <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"> 7468 </div> 7469 </div> 7470 </div> 7471 </div> 7472 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 7473 { 7474 <div class="row"> 7475 <div class="col-12"> 7476 @productShortDescriptionJSON 7477 </div> 7478 </div> 7479 } 7480 <div class="row"> 7481 <div class="col-12 mt-2 table-responsive"> 7482 <table class="table"> 7483 @if(!string.IsNullOrEmpty(productIngredientsJSON)) 7484 { 7485 <tr> 7486 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 7487 <td>@productIngredientsJSON</td> 7488 </tr> 7489 } 7490 @if(!string.IsNullOrEmpty(productPackSize)) 7491 { 7492 <tr> 7493 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 7494 <td>@productPackSize</td> 7495 </tr> 7496 } 7497 @if(!string.IsNullOrEmpty(productDatasheet)) 7498 { 7499 <tr> 7500 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 7501 <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> 7502 </tr> 7503 } 7504 </table> 7505 </div> 7506 </div> 7507 </div> 7508 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template"> 7509 <div class="js-dvp-product-details-animate fade dvp-details"> 7510 <div class="row"> 7511 <div class="col-12"> 7512 <div class="e-product-image-container"> 7513 <div class="e-product-image-wrapper text-center"> 7514 <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}}"> 7515 </div> 7516 </div> 7517 </div> 7518 </div> 7519 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 7520 { 7521 <div class="row"> 7522 <div class="col-12"> 7523 {{{ShortDescription}}} 7524 </div> 7525 </div> 7526 } 7527 <div class="row"> 7528 <div class="col-12 mt-2 table-responsive"> 7529 <table class="table"> 7530 @if(!string.IsNullOrEmpty(productIngredientsJSON)) 7531 { 7532 <tr> 7533 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 7534 <td>{{Ingredients}}</td> 7535 </tr> 7536 } 7537 @if(!string.IsNullOrEmpty(productPackSize)) 7538 { 7539 <tr> 7540 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 7541 <td>{{PackSize}}</td> 7542 </tr> 7543 } 7544 @if(!string.IsNullOrEmpty(productDatasheet)) 7545 { 7546 <tr> 7547 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 7548 <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> 7549 </tr> 7550 } 7551 </table> 7552 </div> 7553 </div> 7554 </div> 7555 </script> 7556 </div> 7557 } 7558 else 7559 { 7560 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 7561 { 7562 groupId = product.GetString("Ecom:Group.ID"); 7563 7564 productName = product.GetString("Ecom:Product.Name"); 7565 7566 publicProductCode = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 7567 7568 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 7569 7570 productIngredients = product.GetString("Ecom:Product.CategoryField.dechradiets.ingredients.Value"); 7571 productPackSize = product.GetString("Ecom:Product.CategoryField.dechradiets.packetsize.Value"); 7572 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechradiets.datasheet.Value"); 7573 7574 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 7575 } 7576 <div class="col-12"> 7577 <div class="row"> 7578 <div class="col-12"> 7579 <h1 class="mb-1 font-weight-bold"> 7580 @rangeName 7581 </h1> 7582 </div> 7583 </div> 7584 </div> 7585 <div class="col-12 col-sm-6 pr-sm-3"> 7586 <div class="row"> 7587 <div class="col-12"> 7588 <div class="e-product-image-container"> 7589 <div class="e-product-image-wrapper text-center"> 7590 <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"> 7591 </div> 7592 </div> 7593 </div> 7594 </div> 7595 </div> 7596 <div class="col-12 col-sm-6 mt-4 mt-sm-0 pl-sm-3"> 7597 @if(!string.IsNullOrEmpty(productShortDescription)) 7598 { 7599 <div class="row"> 7600 <div class="col-12"> 7601 @productShortDescription 7602 </div> 7603 </div> 7604 } 7605 <div class="row"> 7606 <div class="col-12 mt-2 table-responsive"> 7607 <table class="table"> 7608 @if(!string.IsNullOrEmpty(productIngredients)) 7609 { 7610 <tr> 7611 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 7612 <td>@productIngredients</td> 7613 </tr> 7614 } 7615 @if(!string.IsNullOrEmpty(productPackSize)) 7616 { 7617 <tr> 7618 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 7619 <td>@productPackSize</td> 7620 </tr> 7621 } 7622 @if(!string.IsNullOrEmpty(productDatasheet)) 7623 { 7624 <tr> 7625 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 7626 <td><a target="_blank" class="btn btn-sm btn-secondary" href="@productDatasheet">@Translate("Download","Download") <i class="material-icons">get_app</i></a></td> 7627 </tr> 7628 } 7629 </table> 7630 </div> 7631 </div> 7632 </div> 7633 } 7634 7635 <div class="col-12" id="js-dvp-product-supportmaterials"> 7636 <div class="e-product-section border mt-2 py-4 border-left-0 border-right-0"> 7637 <div class="row"> 7638 <div class="col-12 is-loading"> 7639 <div class="e-loading-spinner"></div> 7640 </div> 7641 </div> 7642 </div> 7643 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials" type="text/x-handlebars-template"> 7644 <div class="js-dvp-product-supportmaterials-animate fade"> 7645 <div class="e-product-section border mt-2 py-4 border-left-0 border-right-0 border-bottom-0"> 7646 <div class="row"> 7647 <div class="col-12 col-md-4"> 7648 <div class="e-product-section-header"> 7649 <h2 class="m-a-0">@Translate("Supplementary Materials","Supplementary Materials")</h2> 7650 </div> 7651 </div> 7652 <div class="col-12 col-md-8 mt-half"> 7653 {{#each supportmaterials}} 7654 <div class="row pb-1"> 7655 <div class="col-12"> 7656 <p class="collapsed mb-1 font-weight-bold dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-supportmaterials-{{categoryId}}"> 7657 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 7658 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 7659 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 7660 </p> 7661 </div> 7662 </div> 7663 <div class="row"> 7664 <div class="col-12"> 7665 <div class="collapse" id="collapse-details-supportmaterials-{{categoryId}}"> 7666 <div class="row"> 7667 <div class="col-12 pl-3 pb-2"> 7668 <div class="row border border-top-0 border-right-0 border-left-0"> 7669 {{#each materials}} 7670 <div class="col-12 col-md-6 py-2"> 7671 <div class="row"> 7672 <div class="col-12 col-md-6 text-center"> 7673 <img class="p-img" src="{{imageLarge}}" alt="{{name}}"> 7674 </div> 7675 <div class="col-12 col-md-6 pr-1 mt-1"> 7676 <p class="font-weight-bold">{{name}}</p> 7677 {{#if download}} 7678 <a target="_blank" href="{{url}}"><i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u></a> 7679 {{/if}} 7680 </div> 7681 </div> 7682 </div> 7683 {{/each}} 7684 </div> 7685 </div> 7686 </div> 7687 </div> 7688 </div> 7689 </div> 7690 {{/each}} 7691 </div> 7692 </div> 7693 </div> 7694 </div> 7695 </script> 7696 </div> 7697 } 7698 else 7699 { 7700 <div class="card text-white bg-danger mt-3 mx-auto" style="width: 850px;"> 7701 <div class="card-header py-2"> 7702 <h2 class="m-0 text-center text-white">ERROR!</h2> 7703 </div> 7704 <div class="card-body py-2"> 7705 <h1 class="card-text m-0 text-center text-white">This product range group is <br>missing a ProductCategory</h1> 7706 </div> 7707 <div class="card-footer py-2"> 7708 <h3 class="m-0 text-center text-white">Fix this to show products</h3> 7709 </div> 7710 </div> 7711 } 7712 <code class="d-none js-e-breadcrumb-item-go-back-link"> 7713 <li class="breadcrumb-go-back-link breadcrumb-item m-0 p-0"> 7714 <a href="javascript:history.back();"> 7715 <span>@Translate("Go back","Go back")</span> 7716 </a> 7717 </li> 7718 </code> 7719 } 7720 } 7721 else 7722 { 7723 <div class="row mt-2"> 7724 @signIn() 7725 </div> 7726 } 7727 } 7728 } 7729
keyboard_arrow_up