Component builder for: Mobile PDP

GRANBERG EX 3260

Cut, Impact and Water-Resistant Gloves

International WIPO Patent No. DM/209 739. U.S. Design Patent No. D,946,864.

Cut Resistant

Waterproof

Goatskin palm, Spandex® back, TPR impact protection, waterproof PROTEX™ membrane, thin polyester mesh liner, hook and loop closure.

  • High protection against cuts in palm and fingers, approved according to EN 388:2016 cut level D.
  • Powerful but soft and flexible TPR impact protection design on the back of the hand.
  • Full goatskin palm provides durability and good grip in wet and dry conditions.
  • Thin and soft polyester mesh liner covers membrane and provides comfort.
  • Waterproof and breathable PROTEX™ membrane provides water resistance for activities in wet conditions.
  • Spandexmaterial on the back of the hand for good fitting, greater flexibility and breathability.
  • Elastic wrist with adjustable hook and loop closure provides a secure but comfortable fit around the wrist.

Suitable for:

Work involving risk of cut and impact injuries and performed in wet weather.

Article number

115.3260

Colour

Black, Green, White, Yellow

Glove Fit

Normal fit

Grip

Dry, Wet

Length

20,5-27,5 cm

Sizes

6 | 7 | 8 | 9 | 10 | 11 | 12 | 13

Thickness of leather

0,7-0,9 mm

Back of hand material

Polyester, Spandex

Cuff Type

Hook and loop closure

Liner material

Lining: Polyester liner/ProTex® membrane

Lining type

Thin polyester lining/ProTex® membrane: fully lined, Cut-resistant liner: palm and fingers lined

Palmside material

100% Goatskin

ANSI/ISEA 105-2016

ANSI/ISEA 138-2019

Impact

CE

EN 388:2016+A1:2018

2X32DP

EN ISO 21420:2020

UKCA

EN 374

CHEMICAL

CAS

CLASS

PERMEATION

Packaging Unit

Pair

Sales Units Per Bundle

6

Sales Units Per Outer Case

36

Error executing template "/Designs/Swift/Paragraph/GBG_ProductDownloadPublication.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_883b5532c9564961afc91bdf8a01ebfe.Execute() in D:\dynamicweb.net\Solutions\Degree\granberg.cloud.dynamicweb-cms.com\Files\Templates\Designs\Swift\Paragraph\GBG_ProductDownloadPublication.cshtml:line 25
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using Dynamicweb.Ecommerce.ProductCatalog 3 @using Dynamicweb.Ecommerce.CustomerExperienceCenter.Favorites 4 5 @functions { 6 public ProductViewModel product { get; set; } = new ProductViewModel(); 7 } 8 9 @{ 10 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) 11 { 12 product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"]; 13 } 14 else if (Pageview.Page.Item["DummyProduct"] != null) 15 { 16 var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page); 17 ProductListViewModel productList = pageViewModel.Item.GetValue("DummyProduct") != null ? pageViewModel.Item.GetValue("DummyProduct") as ProductListViewModel : new ProductListViewModel(); 18 19 if (productList?.Products is object) 20 { 21 product = productList.Products[0]; 22 } 23 } 24 25 string uniqueId = $"{product.Id}_{product.VariantId.Replace(".", "_")}_{Pageview.CurrentParagraph.ID}"; 26 27 var selectedCatalogs = Model.Item.GetList("SelectedCatalogs")?.GetRawValue()?.OfType<string>(); 28 int catalogCount = 0; 29 30 string horizontalAlign = Model.Item.GetRawValueString("HorizontalAlignment", string.Empty); 31 horizontalAlign = horizontalAlign == "center" ? "justify-content-center" : horizontalAlign; 32 horizontalAlign = horizontalAlign == "end" ? "justify-content-end" : horizontalAlign; 33 horizontalAlign = horizontalAlign == "full" ? string.Empty : horizontalAlign; 34 35 string buttonSize = Model.Item.GetRawValueString("ButtonSize", "regular"); 36 37 switch (buttonSize) 38 { 39 case "small": 40 buttonSize = " btn-sm"; 41 break; 42 case "regular": 43 buttonSize = string.Empty; 44 break; 45 case "large": 46 buttonSize = " btn-lg"; 47 break; 48 } 49 50 string iconPath = "/Files/icons/"; 51 52 string flexFill = Model.Item.GetRawValueString("HorizontalAlignment", "") == "full" ? "flex-fill" : string.Empty; 53 string fullWidth = Model.Item.GetRawValueString("HorizontalAlignment", "") == "full" ? "w-100" : string.Empty; 54 string icon = Model.Item.GetRawValueString("Icon", iconPath + "printer.svg"); 55 string label = !icon.Contains("_none") ? $"<span class=\"icon-2\">{ReadFile(icon)}</span>" : string.Empty; 56 label += !icon.Contains("_none") && !Model.Item.GetBoolean("HideButtonText") ? " " : string.Empty; 57 label += !Model.Item.GetBoolean("HideButtonText") && !string.IsNullOrEmpty(Model.Item.GetString("Title")) ? Model.Item.GetString("Title") : string.Empty; 58 } 59 60 @if (product is object && selectedCatalogs != null && selectedCatalogs.Any()) 61 { 62 var ecomLanguages = Dynamicweb.Ecommerce.Services.Languages.GetLanguages(); 63 var currencies = Dynamicweb.Ecommerce.Services.Currencies.GetAllCurrencies(); 64 var languageId = Dynamicweb.Ecommerce.Common.Context.LanguageID; 65 var areaEcomLanguageId = Pageview.Area.EcomLanguageId; 66 var areaEcomCurrencyId = Pageview.Area.EcomCurrencyId; 67 68 <div class="d-none @horizontalAlign @fullWidth item_@Model.Item.SystemName.ToLower()"> 69 <button type="button" class="download-publication-btn btn btn-primary @(buttonSize) @flexFill" data-bs-toggle="modal" data-bs-target="#DownloadPublicationModal@(uniqueId)" style="white-space: nowrap" title="@Model.Item.GetString("Title")" id="DownloadPublication@(uniqueId)"> 70 @if (!Model.Item.GetBoolean("HideButtonText")) 71 { 72 <span class="text-nowrap d-flex align-items-center justify-content-center gap-2"> 73 @label 74 </span> 75 } 76 else 77 { 78 @label 79 } 80 </button> 81 </div> 82 83 <div class="modal fade" id="DownloadPublicationModal@(uniqueId)" tabindex="-1" aria-labelledby="#DownloadPublicationModalLabel@(uniqueId)" aria-hidden="true"> 84 <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable"> 85 <form target="_blank" action="/Default.aspx?ID=@selectedCatalogs.FirstOrDefault()" method="post" class="modal-content" id="DownloadPublicationModalForm@(uniqueId)"> 86 <input type="hidden" name="mainproductid" value="@product.Id"> 87 <input type="hidden" name="print" value="true"> 88 89 @if (!string.IsNullOrEmpty(product.VariantId)) 90 { 91 <input type="hidden" name="VariantId" value="@product.VariantId"> 92 } 93 94 <div class="modal-header"> 95 <h1 class="modal-title fs-5" id="DownloadPublicationModalLabel@(uniqueId)">@Translate("Publication for print")</h1> 96 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 97 </div> 98 <div class="modal-body p-3"> 99 @if (Model.Item.GetBoolean("ShowLanguageSelector") && ecomLanguages.Count() > 1) 100 { 101 <div class="mb-4"> 102 <label class="form-label">@Translate("Language")</label> 103 <select name="RequestLanguageID" class="form-select" aria-label="@Translate("Language")"> 104 @foreach (var language in ecomLanguages) 105 { 106 var selected = string.Empty; 107 if (language.LanguageId.Equals(areaEcomLanguageId, StringComparison.OrdinalIgnoreCase)) 108 { 109 selected = "selected"; 110 } 111 <option @selected value="@language.LanguageId">@language.GetDisplayName()</option> 112 } 113 </select> 114 </div> 115 } 116 117 @if (Model.Item.GetBoolean("ShowCurrencySelector")) 118 { 119 <div class="mb-4" id="CurrencySelector@(uniqueId)"> 120 <label class="form-label">@Translate("Currency")</label> 121 <select name="RequestCurrencyCode" class="form-select" aria-label="@Translate("Currency")"> 122 @foreach (var currency in currencies) 123 { 124 var selected = string.Empty; 125 if (currency.Code.Equals(areaEcomCurrencyId, StringComparison.OrdinalIgnoreCase)) 126 { 127 selected = "selected"; 128 } 129 <option @selected value="@currency.Code">@currency.GetName(languageId)</option> 130 } 131 </select> 132 </div> 133 } 134 135 @if (Model.Item.GetBoolean("ShowPriceSelector")) 136 { 137 <div class="mb-4"> 138 <label class="form-label">@Translate("Show price")</label> 139 <div class="form-check"> 140 <input class="form-check-input" type="radio" name="hideprice" value="false" id="HidePriceFalse@(uniqueId)" checked onchange="document.querySelector('#CurrencySelector@(uniqueId)').classList.remove('d-none')"> 141 <label class="form-check-label" for="HidePriceFalse@(uniqueId)"> 142 @Translate("Yes") 143 </label> 144 </div> 145 <div class="form-check"> 146 <input class="form-check-input" type="radio" name="hideprice" value="true" id="HidePriceTrue@(uniqueId)" onchange="document.querySelector('#CurrencySelector@(uniqueId)').classList.add('d-none')"> 147 <label class="form-check-label" for="HidePriceTrue@(uniqueId)"> 148 @Translate("No") 149 </label> 150 </div> 151 </div> 152 } 153 154 @if (Model.Item.GetBoolean("ShowCommentField")) 155 { 156 <div class="mb-4"> 157 <label for="DealerComment@(uniqueId)">@Translate("Comment")</label> 158 <textarea name="DealerComment" class="form-control" rows="6" placeholder="@Translate("Leave a comment here")" id="DealerComment@(uniqueId)"></textarea> 159 </div> 160 } 161 </div> 162 <div class="modal-footer"> 163 <button type="button" onclick="GetPublication(event)" data-bs-dismiss="modal" class="btn btn-primary">@Translate("Print")</button> 164 </div> 165 </form> 166 </div> 167 </div> 168 169 <script> 170 const GetPublication = (e) => { 171 const clickedButton = e.currentTarget; 172 const form = clickedButton.closest('form'); 173 174 form.closest('form').submit(); 175 176 commentField = form.querySelector('textarea[name="DealerComment"]'); 177 commentField.value = ""; 178 }; 179 </script> 180 } 181 else if (Pageview.IsVisualEditorMode) 182 { 183 <div class="d-flex @horizontalAlign @fullWidth item_@Model.Item.SystemName.ToLower()"> 184 <button type="button" class="btn btn-primary @(buttonSize) @flexFill" data-bs-toggle="modal" data-bs-target="#DownloadPublicationModal@(uniqueId)" style="white-space: nowrap" title="@Model.Item.GetString("Title")" id="DownloadPublication@(uniqueId)"> 185 @if (!Model.Item.GetBoolean("HideButtonText")) 186 { 187 <span class="text-nowrap d-flex align-items-center justify-content-center gap-2"> 188 @label 189 </span> 190 } 191 else 192 { 193 @label 194 } 195 </button> 196 </div> 197 } 198 199 <script> 200 if (document.querySelector(".publication-redirect-btn") && document.querySelector(".download-publication-btn")){ 201 const redirectBtn = document.querySelector(".publication-redirect-btn"); 202 const publicationBtn = document.querySelector(".download-publication-btn"); 203 redirectBtn.addEventListener("click",e=>{ 204 publicationBtn.click(); 205 }) 206 } 207 </script> 208
By clicking 'Accept All' you consent that we may collect information about you for various purposes, including: Statistics and Marketing